the new memory model (done right, thanks to Java's mistakes) the moves |
What mistakes?
As for the OP question:
C++11 concentrates on:
1. Fixing minor annoyances:
- unions with classes containaing constructors
- extern templates,
- fixing >> WTF with templates
- sizeof for fields
2. Copying stuff from other languages:
- strongly typed enums (close, but still not as powerful as in Java)
- override and final (Object Pascal, Java, C#, Scala)
- calling constructors from constructors (Java)
- range based for (Java, C#, Python,... well, almost every other language)
- long long int (C)
- lambdas (for me they took second place in the contest for the most ugly syntax for lambdas, first prize goes to PHP)
- new meaning of auto (a very, very limited kind of type inference; Haskell, ML and Scala got much better)
3. New features (nice):
- r-value references, move constructors
- new initialization syntax (which will be very likely a new source of WTFs)
- constexpr
4. Library extensions:
- thread support (better late then never, just on time when modern languages start to dismiss threads for actors / STM / implicit parallelism)
- 4 kinds of smart pointers, yay
- regex support
- 1000 classes for generating random numbers (WTF?)
- some metaprogramming facilities
5. New WTFs:
- literal operator
6. Excluded features:
- concepts (this one was really ugly, compared to how similar feature works in other mainstream languages)
- modules (have to live with header files and slow compile times for the next 10 years)