They should have taken a hint from all of those coding standards coming from companies such as Google, which basically constrain the programmer to a small subset of the language features.
They should have taken a hint from all of those coding standards coming from companies such as Google, which basically constrain the programmer to a small subset of the language features.
(Yeah, this depends on how good your debugger is. Visual Studio and XCode are pretty decent).
And for whatever reason, C++ debuggers and debug info formats don't seem to be doing a great job of keeping up with the language. Even basic stuff like nested function calls (as easily found with any smart pointer/iterator or array class...) tends not to work very well, to say nothing of single stepping in to std::function, or watching STL types, or using iterators or smart pointers in the watch window. So this necessarily means being a bit conservative about which features you use.
(You might have to go through the shipping-a-product process a couple of times before you really internalize this. But once you've learned it, it really does stick.)
I have to ask whether you've actually done any significant amount of programming in C++, both C++11 and pre-C++11.
I'd avoid Alexandrescu-style template trickery unless you really truly need it, though. You can write good C++ that more or less resembles Java, and that's fine.
That doesn't sound like good C++. Making everything a pointer or implementing polymorphism through pointers makes the code harder to reason about, and makes tighter coupling between interfaces and implementations.
You can still do this kind of horror with C++03. I'd know, I have!
Tests: http://sourceforge.net/p/libindustry/code/HEAD/tree/branches...
Code: http://sourceforge.net/p/libindustry/code/HEAD/tree/branches...
This was written shortly before I decided to stop fighting the language and simply use a better one for all of my hobby projects.