It looks like the result of the latest LLVM developer discussion will mean releases past LLVM 3.4 will depend upon a C++11 toolchain for building the compiler infrastructure instead of a C++98 compliant compiler as needed right now to compile LLVM.
In late October I wrote about the LLVM developers considering the use of some C++11
within the compiler itself. LLVM/Clang itself already has C++11 support but this discussion is about using C++11 language features in the code itself. The blocker against using C++11 code in writing LLVM or the Clang C/C++ front-end is that it raises the requirements for what's capable of compiling LLVM/Clang.
The LLVM C++11 usage discussion
has happened multiple times before, but it looks like this time is the charm and that LLVM developers are ready to agree on supporting a subset of C++11 and raising the compiler requirements for building this toolchain.
Committed this week to the LLVM Git repository
was a warning about the impending raising of the compiler requirements.
This is expected to be the last release of LLVM which compiles using a C++98 toolchain. We expect to start using some C++11 features in LLVM and other sub-projects starting after this release. That said, we are committed to supporting a reasonable set of modern C++ toolchains as the host compiler on all of the platforms. This will at least include Visual Studio 2012 on Windows, and Clang 3.1 or GCC 4.7.x on Mac and Linux. The final set of compilers (and the C++11 features they support) is not set in stone, but we wanted users of LLVM to have a heads up that the next release will involve a substantial change in the host toolchain requirements.
This won't mean much to end-users if you're not building LLVM yourself, but it's nice to see another high-profile project readying to adopt the latest C++ ISO standard.
Both the recent releases of GCC and LLVM/Clang support nearly all C++11 functionality. LLVM is just one of now many open-source projects eyeing the use of C++11
. C++11 brings better multi-threading support, generic programming support, uniform initialization, r-value references, lambdas, range-based for-loops, and other new and improved functionality.