I can see that we'll immediately benefit from a few improvements, such as auto variable, lambda support, standard support for unique/shared/weak_ptr. Even old school C++ users who have no interest in fancy new idioms would benefit from these "syntactic sugar" features found in other modern languages. There are a lot more that I'm still exploring, but so far I like what I saw.
Also these new features just work on the compilers. Given how long the standard process has been, a lot of the features were already baked in. Modern g++ and VC++2010 both have very good support. I listened to a BUILD presentation on C++ and the Microsoft folks are very committed to full C++11 compliance in VS11 (next version of Visual Studio), but AFAIK, VS2010 is already quite capable.
So, I agree, if you have a choice, switch NOW.
I'm not familiar with the author's product and can't say whether C++11 is the right choice for him, but I wouldn't consider the constant API churn of OS X or the constant web standard and web standard extension churn to be a good argument in favor of anything.
I think it’s pretty reasonable to argue in favor of using new language features and APIs for new projects, assuming enough of the target audience is using platforms which support them.
GCC: http://gcc.gnu.org/projects/cxx0x.html
Clang: http://clang.llvm.org/cxx_status.html
Visual C++: http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.a...
And IBM: https://www.ibm.com/developerworks/mydeveloperworks/blogs/58...
And Digital Mars: http://www.digitalmars.com/ctg/CPP0x-Language-Implementation...
Apple didn't choose Clang over GCC for political reasons, a lot of Clang devs are actually on the Apple payroll.. and Clang is just a far superior compiler to GCC architecture-wise -- it just needs a few more years to catch up to full C++11 support.
The fact of the matter is that unless you're starting a new project you're probably tied to your old version of the compiler, to upgrade to something newer would require weeks of updating the toolchain.
Do you have any insider knowledge of this? Because the prevailing wisdom around the net is that Apple didn't like to be dependent on a GPL3'd product (which gcc became at some point), so they propped up the only viable alternative at the time, which was LLVM.
Besides, a compiler is just a compiler. Maybe someday down the road they will start producing their own ISA, but until then even if they're making their own ARM chips it's really hard to get it to do special Mac/iPad-only magic.
What I do know is that Clang was funded by Apple almost from the start, it was engineered right from the start to be more than just a compiler but something you could plug into the IDE as well (as the latest XCode demonstrates, it has completely unbeatable C insight).
LLVM itself is also far more extensible than GCC, just look at the slew of new-ish (last 3-4 years) of projects that have launched using LLVM. Have you heard of any such projects being launched with GCC? I can't think of any (maybe if they did, they weren't proud of it).
I am now using GCC 4.4 and haven't used MSVC in a while.
The other day I was stuck on a system with only a C++ (03) compiler, and it was a truly crippling experience without lambdas and the new STL.
Anecdotes aren't worth much, sure, but I find it difficult to disagree with this article.
"How many Mac applications still support OS X 10.2? 10.3? 10.4?"
"Then why should we be so conservative when it comes to C++, the very core of what we work with?"
"C++11 is a much more productive language than C++98. We as an industry can, however, only reap that productivity gain if we stop throwing C++ productivity out of the window by the bucket-load in the hopeless pursuit of compatibility with non-standard implementations."
I'm as much for iconoclasm as the next person, but this whole C++ madness is starting to make me worry. While the rest of us have been off in the trenches of maintenance and production, some cabal of academics and chuckleheads has been cooking up this monstrosity of a language, and now it is finally coming to a head.
Folks, conservatism in software design is appreciated--in language design, essential. Python 3 is still not support by many useful libraries. Perl 5, over ten years later, is still in production and use. ECMA/Javascript is only now really taking off, after 15 years.
And on the darker, even more depressing side of things, you've still F77 codes in "production" and active maintenance--a friend of mine who is a graduate student is dealing with this right now. These are souls being fed to the gaping maw of legacy code.
I'm sure C++ has some interesting features. I understand, for example, why the "auto" keyword is being given new meaning (because the syntax of the STL, classes, and templates is so mindnumbingly awful!). I understand why explicit defaulting and deleting of function might lead to cleaner code (regardless of, say, an explicit that already exists). I understand why I might want 3 different declensions of 'u' in front of a string to support various forms of Unicode (where is your liberalism about forcing everyone to using UTF-8 and being done with it?).
I also understand that D probably has a better execution on these ideas than C++.
And that Javascript and C# have a better implementation of lambdas and closures.
And that for raw power and readability, C with embedded assembly (still!) can probably eat the lunch of any C++. (for an example of rational language evolution, see C1X: http://www.open-std.org/jtc1/sc22/wg14/ )
And that C++ still doesn't have anything other than a crackheaded set of half-idioms for exporting classes for dynamic linking in a crossplatform way, or even for binding to another language! Go ask the poor bastard who wrote SWIG's comments on the same--he quit programming for several years to stop dealing with C++'s increasing garbage.
I feel reasonable in saying this: C++ is not going away soon. One day (even sooner if you are in academic circles and dealing with libraries) we maintenance programmers are going to have to start dealing with code written to take advantage of the new features in C++11.
And on that day, all of us will be wondering why the hell we are still using that katamari of language features, instead of something less baroque--perhaps Perl.
Most of the old mile-long redundant type definitions can go away now, being replaced with just the 'auto' keyword.
The old std:: argument binders were like poor man's lambdas. Now we have real lambdas and don't need them.
The old practice of defining tons of template overloads is no longer required because we have proper variadic templates now. To unfairly pick one example at random of what should no longer be necessary: http://svn.boost.org/svn/boost/trunk/boost/type_traits/detai... Of course this is special purpose-library code that isn't the kind of things most applications would need to write, but it could easily end up in a compiler warning or error message.
Sure, of the people who really didn't like C++ before then C++11 might not change all their minds. But for those of us who used and liked C++ already, these new features represent great simplifying improvements that are only going to help with ongoing maintenance.
C++ is a good language, with some clunk to it. The best parts of it are arguably the bits inherited from C (which C++11 looks like it might break with). The OOPy parts (classes, polymorphism, etc.) have been done better by languages like Java, Javascript, and Smalltalk. Templates exist to get around grossness of the rest of the language, and were done better by Java's generics anyways. Multiple inheritance was done better by Java in the form of interfaces.
The rhetoric is that these changes somehow simplify the language--that's cool and all, and may even be true for the most trivial of examples or the most basic of beginners. The problem is that these new features are going to be released in the wild alongside many libraries who don't use them, being old, and who won't be updated, being cumbersome or trusted. And so, the burden of making the ends meet is going to fall on the rest of us who now have to support, in effect, two languages.
If the improvements are incremental, then this wasn't worth doing, If the improvements are such a new, cleaner, simpler language, why the hell call it C++? Again, see D.
Lastly, most of the fixes are syntactic sugar which do nothing to help fix some very real issues with the deployment of the language.
How do I bind these things to other languages cleanly? In C this is trivial--why isn't this fixed in C++11?
How do I load libraries of classes dynamically at runtime? From C wrappers?
When interfacing with old libraries (which actually do exist), how often am I going to have to write some kind of NULL-nullptr glue code?
Why do we not have variable length arrays (they're in C99)?
Windows
Switch to C++11 NOW. You will kick yourself for not doing it earlier.