or Why You Should Never Use C++!
TLDR: go to Yossi Kreinin's C++ FQA Lite
I am a language buff. I've been writing interpreters and compilers for most of my 40+ years of programming. I prize minimalism, consistency, and implementability in computer languages. C++ has none of these qualities. But it gets worse.
In the 90's I was working with some interesting interpiler tech and thought that perhaps I could make a C++ interpiler. But nevermind the interactive part - I noticed that the language was so ambiguous as to not be compilable at all. To resolve my questions, I was briefly involved with the standardization committee, before ISO/IEC 14882:1998 was ratified and had a chat with Bjarne (which convinced me that the language was in fact a nightmare to be avoided at all costs).
I am a Common Lisp programmer whenever possible. I've been watching this abomination for decades, slowly absorb feature after feature of Lisp - because Lisp got it right 45 years ago. Bolting on features is a specialty of C++ - a Frankensteinian horribleness which is beyond words.
Greenspun's tenth rule of programming
Any sufficiently complicated C or Fortran program contains an ad hoc, informally-specified, bug-ridden, slow implementation of half of Common Lisp.
The incorporation of useful computing paradigms in C++ is completely distorted. Many years ago, two assholes, Bill Gates and Steve Jobs, went to look at a Xerox Smalltalk workstation, and steal some good ideas. Both completely misunderstood the amazing system which passed messages from the mouse deep into hierarchies of live objects and back into the windowing system. They copied what they saw - the windows and the mouse, not the actual brilliant technology unifying the UI with the objects inside the machine. The result is the idiocy of Windows and Mac OS - a thin veneer on top of unrelated crap below.
C++ is just like that. Lisp, the programmable programming language, integrates amazing features into a coherent system which is exposed to, well, Lisp. C++ with a few Lisp features is an idiocy, lacking the numeric tower, macros (no, C++ macros do not count as macros to a Lisp programmer - not even close), without interactivity, without the ability to hotplug code, with a broken object model, no closures, no type inferencing, broken lambdas, inconsistent implicit type conversion, broken reflection, ... and I could go on forever.
If you have _any_ say about which language to choose, avoid C++ like the plague, unless you are invested in wasting money, effort, and enjoy frustration. For god's sakes, stick with C if you need low-level access, or use a real language like Common Lisp.
It saddens me to think how much brainpower is wasted in making really good compilers for really shitty languages. Not to mention the people who use these shitty languages. You literally could not pay me enough to do either.
I will now leave it to my buddy Yossi Kreinin to show you why C++ is literally a pile of shit, and only an insane person with way too much time on their hands (or a corporate drone) would choose to use it.
C++ Frequently Questioned Answers loosely mirrors the questions in C++ FAQ Lite(challenging its incomplete and often misleading answers), in order to expose the unresolvable problems in C++.