A big breakthrough for me today was realizing that most of what I know about #cplusplus is wrong.
I mean literally. There was a standards update in the early 2000s that fundamentally changed some rules of the language, in a desperate attempt to wallpaper over the disaster that error messages had become by forcing developers to be more explicit about specific statements (so that the compiler had enough info to distinguish typos creating accidentally-valid statements from mis-instantiations of templates, because the language is complex enough that parsers can't tell the difference... This is related to the legendary issue with the language that `WhenYou<nest<templates>>` some compilers get really confused about whether you meant "close template argument" or "bitshift right" at the end of that statement).
... but I was programming on Windows back then, and Microsoft basically told the standards committee to pound sand; they had a billion human-hours of accrued business logic (their own and their customers) written in MSVC's interpretation of C++, they'd do what they want. So I got CVS-receipt-length error messages but *didn't* learn the tweaks to the language to try and make those shorter. Those tweaks are (in the new environment I find myself in) `-Wall -Werror`-flagged, so the old ways are dead.
Now I have to learn how the language spec literally changed while I was doing something else and that I just un-lucked into training in the wrong dojo.
Hey, gotta know there's a problem to fix the problem, right? ;)
@glloyd *sigh* I swear I'm trying. It can be hard to find anything satisfying in this language.
It's the only language I'm forced to use professionally that doesn't have any real equivalent to a modern module system. I got a linker error tonight in a Bazel project. What's supposed to implement that function? Who knows? Could be literally anything in our entire thousands-of-files codebase, technically. The fact that there was a header declaration for the missing function means absolutely *nothing.*