Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
C++11 support is now feature-complete.
Loading branch information
@@ -645,8 +645,7 @@ C++11 inheriting constructors
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Use ``__has_feature(cxx_inheriting_constructors)`` to determine if support for
inheriting constructors is enabled. Clang does not currently implement this
feature.
inheriting constructors is enabled.
C++11 inline namespaces
^^^^^^^^^^^^^^^^^^^^^^^
@@ -727,6 +726,12 @@ Use ``__has_feature(cxx_static_assert)`` or
``__has_extension(cxx_static_assert)`` to determine if support for compile-time
assertions using ``static_assert`` is enabled.
C++11 ``thread_local``
^^^^^^^^^^^^^^^^^^^^^^
Use ``__has_feature(cxx_thread_local)`` to determine if support for
``thread_local`` variables is enabled.
C++11 type inference
^^^^^^^^^^^^^^^^^^^^
@@ -818,6 +823,12 @@ Use ``__has_feature(c_static_assert)`` or ``__has_extension(c_static_assert)``
to determine if support for compile-time assertions using ``_Static_assert`` is
enabled.
C11 ``_Thread_local``
^^^^^^^^^^^^^^^^^^^^^
Use ``__has_feature(c_thread_local)`` to determine if support for
``_Thread_local`` variables is enabled.
Checks for Type Traits
======================
@@ -751,6 +751,7 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
.Case (" c_atomic" , LangOpts.C11 )
.Case (" c_generic_selections" , LangOpts.C11 )
.Case (" c_static_assert" , LangOpts.C11 )
.Case (" c_thread_local" , LangOpts.C11 )
// C++11 features
.Case (" cxx_access_control_sfinae" , LangOpts.CPlusPlus11 )
.Case (" cxx_alias_templates" , LangOpts.CPlusPlus11 )
@@ -768,7 +769,7 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
.Case (" cxx_explicit_conversions" , LangOpts.CPlusPlus11 )
.Case (" cxx_generalized_initializers" , LangOpts.CPlusPlus11 )
.Case (" cxx_implicit_moves" , LangOpts.CPlusPlus11 )
// .Case("cxx_inheriting_constructors", false )
.Case (" cxx_inheriting_constructors" , LangOpts. CPlusPlus11 )
.Case (" cxx_inline_namespaces" , LangOpts.CPlusPlus11 )
.Case (" cxx_lambdas" , LangOpts.CPlusPlus11 )
.Case (" cxx_local_type_template_args" , LangOpts.CPlusPlus11 )
@@ -782,6 +783,7 @@ static bool HasFeature(const Preprocessor &PP, const IdentifierInfo *II) {
.Case (" cxx_rvalue_references" , LangOpts.CPlusPlus11 )
.Case (" cxx_strong_enums" , LangOpts.CPlusPlus11 )
.Case (" cxx_static_assert" , LangOpts.CPlusPlus11 )
.Case (" cxx_thread_local" , LangOpts.CPlusPlus11 )
.Case (" cxx_trailing_return" , LangOpts.CPlusPlus11 )
.Case (" cxx_unicode_literals" , LangOpts.CPlusPlus11 )
.Case (" cxx_unrestricted_unions" , LangOpts.CPlusPlus11 )
@@ -37,6 +37,15 @@ int no_alignas();
// CHECK-1X: has_alignas
// CHECK-NO-1X: no_alignas
#if __has_feature(c_thread_local)
int has_thread_local ();
#else
int no_thread_local ();
#endif
// CHECK-1X: has_thread_local
// CHECK-NO-1X: no_thread_local
#if __STDC_VERSION__ > 199901L
int is_c1x ();
#else
@@ -272,3 +272,21 @@ int no_local_type_template_args();
// CHECK-0X: has_local_type_template_args
// CHECK-NO-0X: no_local_type_template_args
#if __has_feature(cxx_inheriting_constructors)
int has_inheriting_constructors ();
#else
int no_inheriting_constructors ();
#endif
// CHECK-0X: has_inheriting_constructors
// CHECK-NO-0X: no_inheriting_constructors
#if __has_feature(cxx_thread_local)
int has_thread_local ();
#else
int no_thread_local ();
#endif
// CHECK-0X: has_thread_local
// CHECK-NO-0X: no_thread_local
@@ -37,7 +37,10 @@ <h2 id="cxx98">C++98 implementation status</h2>
< h2 id ="cxx11 "> C++11 implementation status</ h2 >
< p > Clang provides support for a number of features included in the new < a href ="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372 "> ISO C++ Standard, ISO/IEC 14882:2011</ a > . The following table describes which C++11 features have been implemented in Clang and in which Clang versions they became available.</ p >
< p > Clang implements all of the < a
href ="http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=50372 "> ISO
C++ 2011 standard</ a > . The following table describes the Clang version
in which each feature became available.</ p >
< p > By default, Clang builds C++ code according to the C++98 standard, with many
C++11 features accepted as extensions. You can use Clang in C++11 mode with the
@@ -47,7 +50,8 @@ <h2 id="cxx11">C++11 implementation status</h2>
work with Clang in C++11 mode. Patches are also needed to make
< a href ="libstdc++4.6-clang11.patch "> libstdc++-4.6</ a > ,
and < a href ="libstdc++4.7-clang11.patch "> libstdc++-4.7</ a > work with Clang
releases prior to version 3.2 in C++11 mode.</ p >
releases prior to version 3.2 in C++11 mode. < tt > thread_local</ tt > support
currently requires g++-4.8's C++ runtime library.</ p >
< table width ="689 " border ="1 " cellspacing ="0 ">
< tr >
@@ -349,7 +353,7 @@ <h2 id="cxx11">C++11 implementation status</h2>
< tr >
< td > Thread-local storage</ td >
< td > < a href ="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm "> N2659</ a > </ td >
< td class ="none " align ="center "> No </ td >
< td class ="svn " align ="center "> SVN </ td >
</ tr >
< tr >
< td > Dynamic initialization and destruction with concurrency</ td >
@@ -94,7 +94,7 @@ <h2>Current Status</h2>
targeting X86-32, X86-64, and ARM (other targets may have caveats, but are
usually easy to fix). If you are looking for source analysis or
source-to-source transformation tools, clang is probably a great
solution for you. Clang supports most of C++11, please see the < a
solution for you. Clang supports C++11, please see the < a
href ="cxx_status.html "> C++ status</ a > page for more
information.</ p >
Toggle all file notes
Toggle all file annotations