I've seen people criticize the C++ language in many different ways, and while much of that is legitimate, sometimes I feel they're missing the point. Probably the biggest compiled collection of criticisms would be the C++ FQA, which is a great example of what I'm talking about. Some of the earlier points about header files and undecidable syntax are agreeable awful, but some of the other points don't make a whole lot of sense. Defects 7, 8 and 9 are especially questionable, but I'm not going in to those. I just want to take a chance to rebute some claims against it I've seen online and in person.
It has duplicate funcionality
The most popular example I've seen of this is pointers and references, which I strongly disagree with. This is like saying that 'int' and 'float' are duplicates, since they both store numbers. While pointers and references can be seen as a means of "referencing" something, the way they work and are used (and the concepts they represent) are fundamentally different. Namely, a pointer is a value in itself, while a reference is not. I think "alias" would have been a better name, which may have reduced some of the confusion. It's also worth pointing out that references may not be null (the only way for that to happen would be to dereference a null pointer, which is undefined behavior), but in practice I have seen that occur (though not without having made poor mistakes). One thing I really like about references is they are the only thing I've seen in any language that actually indicate how "array[3] = 2" might work.
It's unsafe
This one I can empathize with, since it is much easier to write fundamentally broken code in C++ than in most other languages. However, the example of this I've seen people bring up is almost always pointer arithmetic, which is strange since that almost never occurs in real code (the only common case would be when its wrapped up in an iterator), and there's much easier and subtler ways to write broken code anyway. I guess this is just another example of people criticizing something without actually having much familiarity with it. In practice C++ can be very safe if written correctly, though I do wish it was just a bit safer, since I already have enough trouble sleeping at night.
The syntax is ugly
There are some cases where C++ can be a bit ugly (array declarations are weird, semicolons after classes are funky) but it's really just a matter of aesthetics. I think APL is pretty fuckin' ugly, but that's mainly because I don't understand it. C++ is in some cases much more verbose than other languages, but that's usually by necessity rather than design. Lambdas for example simply can't be as clean and pretty as those in C# because it would require the compiler to automatically decide whether you want to capture by value or reference, which would be unsafe (though it would be cool for zero-capture lambdas to be that pretty). C++11 has done a lot to make the language much more concise in some areas, and concepts are only going to make it better.
In conclusion
I'll probably think of more and edit this post when I do. There are a lot of things C++ could do better, and I feel like much of it goes back to having been built directly on top of C. However, there are a lot of things I think C++ has done well that I miss when working in other languages, and it bothers me when people unjustly criticize it.