As soon as someone bashes a programming language, people start shouting "use the right tool for the job" and, most of the time, I agree. However, I think that is only true if the language really is the right tool for any job. I'm not sure C++ is ever the right tool. And when C++ is a decent tool for the job, it is only with significant policy reducing its feature surface area.
The two areas were C++ is strongest are actually better handled by C or by a combination of C and a higher level language....
Systems programming: C code is more predictable; less place for bugs to hide. It also better represents the underlying execution model.
Performance critical applications: C offers a standardized binary interface to implement performance critical components with effective interop for business logic written in higher-level languages.
That's not to say that C is the be-all, end-all systems or performance language. It's just better suited to the task than C++. Writing an entire application in C OR C++ is almost never using the right tool for the right job.
The two areas were C++ is strongest are actually better handled by C or by a combination of C and a higher level language....
Systems programming: C code is more predictable; less place for bugs to hide. It also better represents the underlying execution model.
Performance critical applications: C offers a standardized binary interface to implement performance critical components with effective interop for business logic written in higher-level languages.
That's not to say that C is the be-all, end-all systems or performance language. It's just better suited to the task than C++. Writing an entire application in C OR C++ is almost never using the right tool for the right job.