C++98 and C++11 Support in Clang
Last updated: $Date: 2012-04-16 18:04:22 -0700 (Mon, 16 Apr 2012) $
C++98 implementation status
Clang currently implements all of the ISO C++ 1998 standard (including the defects addressed in the ISO C++ 2003 standard) except for 'export' (which has been removed in C++11) and is considered a production-quality C++ compiler. The LLVM bug tracker contains a Clang C++ component that tracks known Clang C++ bugs.
C++11 implementation status
Clang provides support for a number of features included in the new ISO C++ Standard, ISO/IEC 14882:2011. The following table describes which C++11 features have been implemented in Clang and in which Clang versions they became available.
You can use Clang in C++11 mode either with libc++ or with gcc's libstdc++. Patches are needed to make libstdc++-4.4 and libstdc++-4.7 work with Clang in C++11 mode.
| Language Feature | C++11 Proposal | Available in Clang? | 
|---|---|---|
| Rvalue references | N2118 | Clang 2.9 | 
| Rvalue references for *this | N2439 | Clang 2.9 | 
| Initialization of class objects by rvalues | N1610 | Clang 2.9 | 
| Non-static data member initializers | N2756 | Clang 3.0 | 
| Variadic templates | N2242 | Clang 2.9 | 
| Extending variadic template template parameters | N2555 | Clang 2.9 | 
| Initializer lists | N2672 | SVN | 
| Static assertions | N1720 | Clang 2.9 | 
| auto-typed variables | N1984 | Clang 2.9 | 
| Multi-declarator auto | N1737 | Clang 2.9 | 
| Removal of auto as a storage-class specifier | N2546 | Clang 2.9 | 
| New function declarator syntax | N2541 | Clang 2.9 | 
| Lambda expressions | N2927 | SVN | 
| Declared type of an expression | N2343 | Clang 2.9 | 
| Incomplete return types | N3276 | SVN | 
| Right angle brackets | N1757 | Clang 2.9 | 
| Default template arguments for function templates | DR226 | Clang 2.9 | 
| Solving the SFINAE problem for expressions | DR339 | Clang 2.9 | 
| Alias templates | N2258 | Clang 3.0 | 
| Extern templates | N1987 | Clang 2.9 | 
| Null pointer constant | N2431 | Clang 3.0 | 
| Strongly-typed enums | N2347 | Clang 2.9 | 
| Forward declarations for enums | N2764 DR1206 | SVN | 
| Generalized attributes | N2761 | No | 
| Generalized constant expressions | N2235 | SVN | 
| Alignment support | N2341 | Clang 3.0 | 
| Delegating constructors | N1986 | Clang 3.0 | 
| Inheriting constructors | N2540 | No | 
| Explicit conversion operators | N2437 | Clang 3.0 | 
| New character types | N2249 | Clang 2.9 | 
| Unicode string literals | N2442 | Clang 3.0 | 
| Raw string literals | N2442 | Clang 3.0 | 
| Universal character names in literals | N2170 | SVN | 
| User-defined literals | N2765 | SVN | 
| Standard Layout Types | N2342 | Clang 3.0 | 
| Defaulted functions | N2346 | Clang 3.0 | 
| Deleted functions | N2346 | Clang 2.9 | 
| Extended friend declarations | N1791 | Clang 2.9 | 
| Extending sizeof | N2253 DR850 | SVN | 
| Inline namespaces | N2535 | Clang 2.9 | 
| Unrestricted unions | N2544 | SVN | 
| Local and unnamed types as template arguments | N2657 | Clang 2.9 | 
| Range-based for | N2930 | Clang 3.0 | 
| Explicit virtual overrides | N2928 N3206 N3272 | Clang 3.0 | 
| Minimal support for garbage collection and reachability-based leak detection | N2670 | N/A | 
| Allowing move constructors to throw [noexcept] | N3050 | Clang 3.0 | 
| Defining move special member functions | N3053 | Clang 3.0 | 
| Concurrency | ||
| Sequence points | N2239 | No | 
| Atomic operations | N2427 | SVN | 
| Strong Compare and Exchange | N2748 | No | 
| Bidirectional Fences | N2752 | SVN | 
| Memory model | N2429 | No | 
| Data-dependency ordering: atomics and memory model | N2664 | No | 
| Propagating exceptions | N2179 | Clang 2.9 | 
| Abandoning a process and at_quick_exit | N2440 | N/A | 
| Allow atomics use in signal handlers | N2547 | SVN | 
| Thread-local storage | N2659 | No | 
| Dynamic initialization and destruction with concurrency | N2660 | No | 
| C99 Features in C++11 | ||
| __func__predefined identifier | N2340 | Clang 2.9 | 
| C99 preprocessor | N1653 | Clang 2.9 | 
| long long | N1811 | Clang 2.9 | 
| Extended integral types | N1988 | No |