Recently I read an article in Artima, titled "Have Generics Killed Java?". This article is not the first one to complain about the complexities introduced into Java due to Generics. I used to a C++ programmer for around 6 years and been a big fan of the language. When I switched to using Java, during the pre-Generics era, I simply loved the simplicity and lucidness of Java. After reading the section on Generics in Effective Java, and having learnt the IFs and BUTs of the Generics, I realized how many things one has to remember to make effective use of Generics.
I rememberd an answer given by Bjarne Stroustrup, the creator of C++, a few years before the introduction of Generics. The gist if his answer was that every language commercially successful and used in large scale follows exactly the same path C++ and (now) Java is following. That is to start simple and eventually getting more and more complex.
After reading the FAQ for C++0X and some of the modules in Boost library, I now feel that C++ is conquering complexity, especially concurrent programming, using some elegant abstractions. Despite the attempt to conquer complexity, I personally feel that C++0X has too many things to remember :-(