>>14
I agree with this completely. It applies even more when you have to debug something that fails somewhere inside the 'hidden' code the compiler automatically generates.
C doesn't have this problem because it's limited in terms of automatically generating code. With C++, things like constructor and destructor calls are generated automatically, and composing deeply nested objects with lots of composition can increase this hidden complexity to surprisingly high levels. Add templated classes (consisting of templated members and superclasses), and it multiplies even more.
Hiding complexity may make things look simpler on the surface, but frustrates understanding of the code, an essential point when debugging. Moreover, the concept of "informed decisions", another important aspect of why C is used --- because it lets the programmer understand the implications of her code easily --- by definition is based upon having knowledge of such details. C++ makes this slightly more difficult due to the autogenerated code, C++11 is going to make it worse.
When
auto x = something() looks nearly the same as
int x = something(), when a "smart pointer" looks nearly the same as a regular pointer, you've lost that information. Without that information, you've lost the ability to make an informed decision.
The aforementioned new features make it much easier to create lots of code, but make it correspondingly harder to understand it.
"With great power comes great responsibility."