Too obtuse? I worked in C++ several years professionally, and didn't have that feeling. I was able to code anything I wanted.
I consider myself an average programmer, and from my experience it takes at least one year to understand C++ to reach the level of being proficient in it. I was asking my question above since in many cases, I found that the critique of C++ comes from people who didn't put enough effort to understand it thoroughly. (but I am not talking about anyone here, it's just a general observation of mine).
- What is the destruction order of virtual base classes in C++?
- Write a noncopyable class template that takes one typename argument.
These aren't just trivia questions. You actually need to know this stuff to be able to plan and design correct C++ code.
FWIW, I'm a recovering C++ Language Lawyer[1], and I still consider myself to have an "expert" level of proficiency at C++. The problem with C++ is that you need to be an "expert" or you'll make subtle and complicated errors. Errors that may not show up later until you have some sort of interoperability problem. Yes, you can write great code in C++, but it shouldn't be as hard and complicated as C++ makes it. Tools should help, not hinder.
C++ can be used for systems programming, so I don't think there's any good argument that it's not a sharp enough tool. I agree that "obtuse" is a poor criticism.
[...] from my experience it takes at least one year to understand C++ to reach the level of being proficient in it. [...] I found that the critique of C++ comes from people who didn't put enough effort to understand it thoroughly.