I like this one: "By definition, a program is an entity that is run by the computer. It talks directly to the CPU and the OS. Code that does not talk directly to the CPU and the OS, but is instead run by some other program that does talk directly to the CPU and the OS, is not a program; it's a script." Here's the other eleven.

Except the STL is almost entirely duplicate functionality. list and map are the only new containers. Everything else is either a duplicate or a minor change away from being a duplicate.

Set, queue, deque, unordered (hash), heap. If by "minor change" you mean lack of manual memory management, then yeah. But I would call that an improvement.

Bunch of standard algorithms. Smart pointers. Concurrency.

Let's not forget that C++ allows things like Boost to happen.

Vectors don't really make life easier. And RAII is only useful if you're doing OO.

So you like having to explicitly allocate and deallocate memory? Even with C99 variable length arrays, you can't easily push or pop or insert or delete items or resize without the possibility of introducing bugs. Then you also have to manually keep track of the length of the array in case you don't use the whole thing.

The C I/O functions work at least as well as C++'s, even on objects.

And?

Honestly, I think Qt is crazy, but most GUI programming is.

Then in no way can you say anything about C++. C++ is designed for complicated things, like GUI programming for example.

All those containers are duplicates of other containers in the STL. Also, Boost is a nightmare, not a benefit.

If you can't manage an array, then you have no right to be talking about "complicated things." Arrays are not difficult things to work with. Push, pop, insert, and delete are all straight forward functions (that C should have defined, but I digress.) Keeping track of the length is also not difficult (and can be managed by the push/pop/insert/delete functions.)

GUI programming is not crazy because it's complicated, it simply isn't complicated. It's tedious. But more to the point, the current style of GUI programming is crazy because it ignores good coding conventions )such as reduction of coupling.) This is practically a requirement of most GUI frameworks, because they insist on ignoring the fact that they're dealing with a reactive system. Instead of making themselves reactive, they use the event model (which only poorly emulates the desired properties, because it requires explicit handling of events.)