C++0x/C++11 Support in GCC

C++0x was the working name of the ISO C++ 2011 standard, which introduced a host of new features into the standard C++ language and library. This project sought to implement new C++11 features in GCC, and made it the first compiler to bring feature-complete C++11 to C++ programmers.

C++11 features are available as part of "mainline" GCC in the trunk of GCC's repository and in GCC 4.3 and later. To enable C++0x support, add the command-line parameter -std=c++0x to your g++ command line. Or, to enable GNU extensions in addition to C++0x extensions, add -std=gnu++0x. GCC 4.7 and later support -std=c++11 and -std=gnu++11 as well.

Important: Before GCC 5.1 support for C++11 was experimental. Some features were implemented based on early proposals, and no attempt was made to maintain backward compatibility when they were updated to match the final C++11 standard.

C++11 Language Features

The following table lists new language features that have been accepted into the C++11 standard. The "Proposal" column provides a link to the ISO C++ committee proposal that describes the feature, while the "Available in GCC?" column indicates the first version of GCC that contains an implementation of this feature (if it has been implemented).

For information about C++11 support in a specific version of GCC, please see:

Language Feature Proposal Available in GCC? SD-6 Feature Test
Rvalue references N2118 GCC 4.3 __cpp_rvalue_references >= 200610
    Rvalue references for *this N2439 GCC 4.8.1 __cpp_ref_qualifiers >= 200710
Initialization of class objects by rvalues N1610 Yes
Non-static data member initializers N2756 GCC 4.7 __cpp_nsdmi >= 200809
Variadic templates N2242 GCC 4.3 __cpp_variadic_templates >= 200704
    Extending variadic template template parameters N2555 GCC 4.4
Initializer lists N2672 GCC 4.4 __cpp_initializer_lists >= 200806
Static assertions N1720 GCC 4.3 __cpp_static_assert >= 200410
auto-typed variables N1984 GCC 4.4
    Multi-declarator auto N1737 GCC 4.4
    Removal of auto as a storage-class specifier N2546 GCC 4.4
    New function declarator syntax N2541 GCC 4.4
New wording for C++0x lambdas N2927 GCC 4.5 __cpp_lambdas >= 200907
Declared type of an expression N2343 GCC 4.3 __cpp_decltype >= 200707
    decltype and call expressions N3276 GCC 4.8.1
Right angle brackets N1757 GCC 4.3
Default template arguments for function templates DR226 GCC 4.3
Solving the SFINAE problem for expressions DR339 GCC 4.4
Template aliases N2258 GCC 4.7 __cpp_alias_templates >= 200704
Extern templates N1987 Yes
Null pointer constant N2431 GCC 4.6
Strongly-typed enums N2347 GCC 4.4
Forward declarations for enums N2764 GCC 4.6
Generalized attributes N2761 GCC 4.8 __cpp_attributes >= 200809; __has_cpp_attribute(noreturn) >= 200809; __has_cpp_attribute(carries_dependency) == 0 (not implemented)
Generalized constant expressions N2235 GCC 4.6 __cpp_constexpr >= 200704
Alignment support N2341 GCC 4.8
Delegating constructors N1986 GCC 4.7 __cpp_delegating_constructors >= 200604
Inheriting constructors N2540 GCC 4.8 __cpp_inheriting_constructors >= 200802
Explicit conversion operators N2437 GCC 4.5
New character types N2249 GCC 4.4 __cpp_unicode_characters >= 200704
Unicode string literals N2442 GCC 4.5 __cpp_unicode_literals >= 200710
Raw string literals N2442 GCC 4.5 __cpp_raw_strings >= 200710
Universal character name literals N2170 GCC 4.5
User-defined literals N2765 GCC 4.7 __cpp_user_defined_literals >= 200809
Standard Layout Types N2342 GCC 4.5
Defaulted and deleted functions N2346 GCC 4.4
Extended friend declarations N1791 GCC 4.7
Extending sizeof N2253 GCC 4.4
Inline namespaces N2535 GCC 4.4
Unrestricted unions N2544 GCC 4.6
Local and unnamed types as template arguments N2657 GCC 4.5
Range-based for N2930 GCC 4.6 __cpp_range_based_for >= 200907
Explicit virtual overrides N2928
N3206
N3272
GCC 4.7
Minimal support for garbage collection and reachability-based leak detection N2670 No
Allowing move constructors to throw [noexcept] N3050 GCC 4.6
Defining move special member functions N3053 GCC 4.6
Concurrency
Sequence points N2239 Yes
Atomic operations N2427 GCC 4.4
Strong Compare and Exchange N2748 GCC 4.5
Bidirectional Fences N2752 GCC 4.8
Memory model N2429 GCC 4.8
Data-dependency ordering: atomics and memory model N2664 GCC 4.4
(memory_order_consume)
Propagating exceptions N2179 GCC 4.4
Abandoning a process and at_quick_exit N2440 GCC 4.8
Allow atomics use in signal handlers N2547 Yes
Thread-local storage N2659 GCC 4.8
Dynamic initialization and destruction with concurrency N2660 GCC 4.3
C99 Features in C++11
__func__ predefined identifier N2340 GCC 4.3
C99 preprocessor N1653 GCC 4.3
long long N1811 GCC 4.3
Extended integral types N1988 Yes

C++11 Library Features

The status of the library implementation can be tracked in this table

Historical Branches

C++0x Concepts Branch

Support for the Concepts feature, which is not part of C++11, is not under active development at this time. The prototype implementation, ConceptGCC, can be found on the branches/conceptgcc-branch. Previously there was a plan to develop a superior implementation on a separate development branch, branches/cxx0x-concepts-branch, but not much work was done on that branch.