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