From: Douglas Gregor Date: Fri, 14 Oct 2011 23:21:49 +0000 (+0000) Subject: Switch the C++11 status table from a developer-centric list to a X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=43ac6d0922a3408e23d410ccd224c845399bf181;p=clang Switch the C++11 status table from a developer-centric list to a user-centric list, with Clang version numbers, following GCC's lead (and user requests). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@142015 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/www/cxx_status.html b/www/cxx_status.html index cabfc67aae..a48e226ee8 100644 --- a/www/cxx_status.html +++ b/www/cxx_status.html @@ -36,7 +36,7 @@

C++11 Implementation status

-

Clang provides support for a number of features included in the new ISO C++ Standard, ISO/IEC 14882:2011. This section tracks the status of various C++11 +

Clang provides support for a number of features included in the new ISO C++ Standard, ISO/IEC 14882:2011. This section tracks the status of various C++11 features, and a number of other C++11 features are under active development.

You can use Clang in C++11 mode either @@ -44,596 +44,327 @@ with libc++ or with gcc's libstdc++. libstdc++-4.4 requires a patch to work with clang; other versions have not been tested.

- - - -

The following table is used to help track our implementation - progress toward implementing the complete C++'11 standard. We use a - simple, somewhat arbitrary color-coding scheme to describe the - relative completeness of features:

- - - - - - - - - - - - - - - - - - - - - -
Not started/not evaluatedNot ApplicableBrokenSome examples workMany examples workNearly everything worksComplete
N/ArXXXXXX
- -

In addition, boxes marked with ✓ have complete and passing tests. - Similarly, boxes marked with ✗ have complete tests, some of which - are failing, and a ? indicates partial tests while not making any - statement about passing status.

+ + Language Feature + C++0x 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 + No + + + 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 + + + New wording for C++0x lambdas + N2927 + No + + + Declared type of an expression + N2343 + Clang 2.9 + + + 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 + + No + + + Generalized attributes + N2761 + No + + + Generalized constant expressions + N2235 + No + + + 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 name literals + N2170 + No + + + User-defined literals + N2765 + No + + + Standard Layout Types + N2342 + Clang 3.0 + + + Defaulted and deleted functions + N2346 + Clang 2.9 + + + Extended friend declarations + N1791 + Clang 2.9 + + + Extending sizeof + N2253 + No + + + Inline namespaces + N2535 + Clang 2.9 + + + Unrestricted unions + N2544 + No + + + 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 + No + + + Allowing move constructors to throw [noexcept] + N3050 + Clang 3.0 + + + Defining move special member functions + N3053 + Clang 3.0 + -

A feature is "complete" when the appropriate Clang component (Parse, AST, -Sema, CodeGen) implements the behavior described in all of the -paragraphs in the C++'11 standard. The major -components are:

+ + Concurrency + + + Sequence points + N2239 + No + + + Atomic operations + N2427 + No + + + Strong Compare and Exchange + N2748 + No + + + Bidirectional Fences + N2752 + No + -
-
Parse
-
Clang is able to parse the grammar of this feature (or the grammar - described by this section), but does not necessarily do anything with the - parsed result. Use Clang's -fsyntax-only option to parse C++ - programs.
- -
AST
-
Clang builds an abstract syntax tree (AST) for the feature, but does not - necessarily perform any type-checking. Use Clang's -ast-print - option to print the resulting ASTs.
- -
Sema
-
Clang parses and type-checks this feature and provides a well-formed AST - annotated with types. Use Clang's -fsyntax-only to type-check - code.
- -
CodeGen
-
Clang parses, type-checks, and generates code for this feature, allowing - one to compile and execute programs.
-
- -

Updates to this table are welcome! Tests for the various features are also -welcome!

- - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + +
C++11 Features (standard available here)
FeatureParseASTSemaCodeGenStandard SectionsNotes
Control Flow Modifications
Range-based for loop6.5.4N2243 - N3271
Memory modelN2429No
Data-dependency ordering: atomics and memory modelN2664No
Propagating exceptionsN2179Clang 2.9
Abandoning a process and at_quick_exitN2440No
Allow atomics use in signal handlersN2547No
Thread-local storageN2659No
Dynamic initialization and destruction with concurrencyN2660No
Type System Modifications
rvalue references8.3.2N2118, - N2831 N2439 -
decltype7.1.6.2N2343 - N1478 - N1978 -
auto type deduction7.1.6.2, 7.1.6.4N1984
nullptr2.14.7, 4.10, 4.11N2431 - N1488 - N2214 -
enum classes7.2N1513 - N2347 - N2499 - Includes forward declaration capability -
long long3.9.1C99 - N1811 -
constexpr3.6.2, 3.9, 5.19, 7.1.5N1521 - N2235 -
char16_t/char32_tN2249
Unicode string literal types2.14.3, 2.14.5
Raw string literal types2.14.5N2053 - N2442 - N2378 -
user-defined literal types2.14.8N2378
POD definition changes3.9, 9N2294
Unrestricted unions9.5N2544
Tighter narrowing rules8.5.4N1890 - N2215 - N2640 -
Class Modifications
delegating constructors12.6.2N1986
inheriting constructors12.9N1890 - N1898 - N2512 -
In-declaration member initializationN2628
Changes to implicitly generated methodsIncludes implicit generation of move operations
defaulted methodsN1717 - N2326 -
Implicit destructor exception specification
sizeof on members without object instanceN2150
Explicit override controls
Explicit conversion operatorsN/A12.3N2437 - N2333 - Does not implement DR899
Template Modifications
Right angle bracketsN/AN/AN/AN1757
variadic templates14.6.3N2080 - N2087 - N2242 - N2488 - N2555 -
template aliases7.1.3, 14.6.7N1489 - N2258 -
Removal of exportN/AN/AN/AThis was never implemented in C++03
extern templates14.8.2N1987
Local classes as template parametersN2402 - N2657 -
Exception Modifications
Deprecation of exception specifications15.4
noexceptN/A5.3.7, 15.4N3050
Preprocessor Modifications
__STDC_HOSTED__N/AN/AN/A16.8C99 - N1568 -
_PragmaN/AN/AN/A16.9C99 - N1568 -
Variable argument macrosN/AN/AN/A16.3C99 - N1568 -
Empty macro argumentsN/AN/AN/A16.3C99 - N1568 -
__func__N/AN/AN/A8.4.1C99 - N1568 -
__cplusplusN/AN/AN/A16.8
Things Completely New
Late-specified return typeN/A8.3.5N2445
lambda expressions5.1.2N1968 - N2550 - N2859 -
Uniform initializers 12.6N2215 - N2640 -
Memory model1.7N2556
Miscellania
Standard attribute syntaxN2418
alignment control
Deleted functionsN/A8.4.3N2326
- This also includes class methods.
static_assertN/A7N1381 - N1720 -
Inline namespacesN/A7.3.1N2535
thread_local storage3.7.2, 7.1.1N2660
Standard Library Modifications, see libc++ or libstdc++ or VC++ 2010
C99 Features in C++0x
__func__ predefined identifierN2340Clang 2.9
C99 preprocessorN1653Clang 2.9
long longN1811Clang 2.9
Extended integral typesN1988No