Most of those games you quoted are very old and OP has probably played them all and is looking for something new.
Wasteland 2 comes out this Friday (9/19) and Pillars of Eternity is still in Beta. Unless you've got a time machine that's about as new as it gets.
Don't you think that implies at least some sort of effort to understand them?
Well apparently not, because you stated multiple points that are, as of today, patently false. Perhaps it was different in C++98, but (in case you didn't know), it's not 1998 anymore.
Might I ask what you feel to be unpleasant about C++11's additions? Do you have any specific cases in mind?
A lot of people will (and do) use the =delete syntax. Prior to that you would have to declare the method as being private, but this wasn't perfect. Class friend and member functions could still access them, and the errors would only be detected at link time. Alternately you could use boost noncopyable, but you can't always use boost. With the =delete syntax, errors are detected at compile time, and provide some semantic information about your code to anyone reading it.
Also, it's actually 6 implicit functions that compilers generate; you forgot about the copy-assignment and move-assignment operators.
Sorry but this is nonsense. Templates aren't any slower than hand-written code. Compilers may have had problems with templates a decade ago, but template support among the major compilers nowadays are very solid and consistent.
You say "many programmers minimize their use of templates, both in their own code and in their use of templated library code" -- are you saying "many" programmers writing C++ don't use boost or the standard library? Because that too is nonsense. Many bad programmers perhaps?
Lastly, partial specialization is very convenient for performing compile time recursion, which is pretty essential to template metaprogramming.
When is C++ going to natively support multiple return types? i.e.
float sin, cos, angle; sin, cos
:= SinCos( angle );
Right now we can use a struct hack, but native support would be appreciated.
You could always just return a tuple, then use tie on the caller side. To use your example,
std::tuple SinCos(float angle) {
...
return std::make_tuple(sin, cos);
}
float sin, cos;
std::tie(sin, cos) = SinCos(angle);
Also, your last question isn't really a question, is it?
If you change a private implementation detail in a class, you have to recompile everything which uses the class. This is the opposite of encapsulation.
Yes, that's what the PIMPL idiom is for. Here's a nice introduction to it .
As with most everything, there's a way to solve that problem in C++, it just takes some work and knowledge to know what, when, and how to use it. I do agree that the language is too big though; conceptually, C++ could be broken into 4 distinct components (C, STL, templates, OOP), as each have their own quirks and idioms that don't necessarily carry over well to the other, and some are even Turing complete on their own (ie template metaprogramming)
Happiness is twin floppies.