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? ;)
The ">>" parsing ambiguity was fixed in C++11. There has been so many changes to C++ over the years.
The core fundamentals are still there. But modern C++ approaches, influenced by changes in C++11/14/17/20/23, is practically alien to anyone use to pre C++11 code.
If you are coming upto speed with modern C++ enjoy the ride. Genuinely enjoy it, it can be a satisfying endeavor.
@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.
QOTO: Question Others to Teach Ourselves
An inclusive, Academic Freedom, instance
All cultures welcome.
Hate speech and harassment strictly forbidden.