- The subject gets compared to other alternatives feature by feature, without considering the context. Every design, whether of a programming language or OS or for that matter any tool, goes through a series of decisions. And they result in both pros and cons. It works efficiently if the pros are inline with the purpose it was designed with.
- There is no genuine argument about how it does something bad. Unfortunately many feel that doing differently from what they know is doing bad. I think Linux has been hurt a lot because of this.
- A true critique should not look at just one point in time, but look at evolution of the subject. I wonder how many have really gone through The Design and Evolution of C++, which explains a lot of decisions taken. This is important because it puts you in the designer’s shoes and gives you a chance to make a better decision.
- The recommended usage is usually skipped, and all kinds of acrobatics are tried to show how the subject allows users to do wrong things. This seems to be a trend, especially in programming languages, to restrict the programmer instead of giving freedom. Again, it might work for some, not for some others.
- The criticism is mostly personal taste and preferences. Not that they should be ignored, but they can used to judge suitability only for self, not for others. Rather, they cannot be included in global arguments. If it is not suitable I cannot imaging someone forcing you to use it.
- The fact that the subject is different from the alternatives might mean that they have different purposes. Without acknowledging this difference the subject is bashed because some things are not easy to do.
- The subject is blamed if its users do not do well to use it properly. This is valid in some cases, but not all. Especially when they are programmers who have knowledge of the domain. A point to note here is that C++ does not intend to be a simple language, two of its aims are compatibility with C and high performance, which might draw complexity.
I think a good and constructive criticism will show how can one do better than the subject in a given context. That is where the comparison is useful, not on a point-to-point match. C++ has seen too many criticisms explaining how it is unsuitable for that programmer, which no one can argue. Unfortuately they are put to show as if it is unsuitable for everyone else.
I think it might be helpful to read the following on C++ to get a bigger picture:
There have been criticisms earlier, but all of them look at what C++ does not have. It might be informative to find out why the elements are not there.