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 the "mainline" GCC compiler in the trunk of GCC's Subversion 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
to your g++
command line. GCC 4.7 and later support -std=c++11
and -std=gnu++11
as well.
Important: GCC's support for C++11 is still experimental. Some features were implemented based on early proposals, and no attempt will be made to maintain backward compatibility when they are 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:
- GCC 4.3 C++0x Status
- GCC 4.4 C++0x Status
- GCC 4.5 C++0x Status
- GCC 4.6 C++0x Status
- GCC 4.7 C++11 Status
- GCC 4.8 C++11 Status
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