Some of these are hilarious.
I'm always astounded how easy it is to shoot yourself in the foot with C++.
It's such a important, transformative and widely used language, but due to the age and the "let's put everything in without ever removing anything because backwards compatability!" mentality has created a monster.
It's not just the number of things, but the way they combine, as in the rules for argument-dependent lookup (not to be mistaken for unqualified name lookup or template type deduction.) When you have pointers and two or arguably three types of references, and arrays that decay to pointers in some cases, there's a lot of different cases to be considered. It's quite an achievement that it often works the way you want.
It's such a important, transformative and widely used language, but due to the age and the "let's put everything in without ever removing anything because backwards compatability!" mentality has created a monster.