The hidden cost are your headaches if you get C++ code from someone who uses a different set of C++ features to achieve some effect than you use to use. C++ has so many ways to do something, and different people will use different approaches. To read, understand and extend foreign C++ code you really must have coverage all of C++ features
I like Java for the fact that it is leaner and simpler than C++, syntax-wise.
Templates and overloaded operators are perfect tools to code pitfalls for other programmers. You never will know if an operator symbol is overloaded for the types left and right, or if it really means what it seems to mean.