GCC provides experimental support for the upcoming ISO C++
standard, C++0x. This support can be enabled with the
-std=c++0x or -std=gnu++0x compiler
options; the former disables GNU extensions.
GCC's C++0x mode tracks the C++0x working paper drafts produced by the ISO C++ committee, available on the ISO C++ committee's web site at https://www.open-std.org/jtc1/sc22/wg21/. Since this standard is still being extended and modified, the feature set provided by the experimental C++0x mode may vary greatly from one GCC version to another. No attempts will be made to preserve backward compatibility with C++0x features whose semantics have changed during the course of C++0x standardization.
The following table lists which C++0x features are supported in this release of GCC. For more information about C++0x support in GCC, please see the C++0x in GCC project page.
| Language Feature | Proposal | Available in GCC 4.4? |
|---|---|---|
| Rvalue references | N2118 | Yes |
Rvalue references for *this |
N2439 | No |
| Initialization of class objects by rvalues | N1610 | Yes |
| Variadic templates | N2242 | Yes |
| Extending variadic template template parameters | N2555 | Yes |
| Initializer lists | N2672 | Yes |
| Static assertions | N1720 | Yes |
auto-typed variables |
N1984 | Yes |
Multi-declarator auto |
N1737 | Yes |
| Removal of auto as a storage-class specifier | N2546 | Yes |
| New function declarator syntax | N2541 | Yes |
| Lambda expressions and closures | N2550 | No |
| Constness of lambda functions | N2658 | No |
| Declared type of an expression | N2343 | Yes |
| Right angle brackets | N1757 | Yes |
| Default template arguments for function templates | DR226 | Yes |
| Solving the SFINAE problem for expressions | DR339 | Yes |
| Template aliases | N2258 | No |
| Extern templates | N1987 | Yes |
| Null pointer constant | N2431 | No |
| Strongly-typed enums | N2347 | Yes |
| Forward declarations for enums | N2764 | No |
| Generalized attributes | N2761 | No |
| Generalized constant expressions | N2235 | No |
| Alignment support | N2341 | No |
| Delegating constructors | N1986 | No |
| Inheriting constructors | N2540 | No |
| Explicit conversion operators | N2437 | No |
| New character types | N2249 | Yes |
| Unicode string literals | N2442 | No |
| Raw string literals | N2442 | No |
| Universal character name literals | N2170 | No |
| Extensible literals | N2765 | No |
| Standard Layout Types | N2342 | No |
| Defaulted and deleted functions | N2346 | Yes |
| Extended friend declarations | N1791 | No |
Extending sizeof |
N2253 | Yes |
| Inline namespaces | N2535 | Yes |
| Unrestricted unions | N2544 | No |
| Local and unnamed types as template arguments | N2657 | No |
| Minimal support for garbage collection and reachability-based leak detection | N2670 | No |
| Concepts | N2773 | No |
| Concurrency | ||
| Sequence points | N2239 | No |
| Atomic operations | N2427 | Yes |
| Strong Compare and Exchange | N2748 | No |
| Bidirectional Fences | N2752 | No |
| Memory model | N2429 | No |
| Data-dependency ordering: atomics and memory model | N2664 | No |
| Propagating exceptions | N2179 | Yes |
| Abandoning a process and at_quick_exit | N2440 | No |
| Allow atomics use in signal handlers | N2547 | No |
| Thread-local storage | N2659 | No |
| Dynamic initialization and destruction with concurrency | N2660 | No |
| C99 Features in C++0x | ||
__func__ predefined identifier |
N2340 | Yes |
| C99 preprocessor | N1653 | Yes |
long long |
N1811 | Yes |
| Extended integral types | N1988 | No |