Language Standard | Flag | Available in Clang? |
---|---|---|
C++2c | -std=c++2c | Partial |
C++23 | -std=c++23 | Partial |
C++20 | -std=c++20 | Partial |
C++17 | -std=c++17 | Clang 5 |
C++14 | -std=c++14 | Clang 3.4 |
C++11 | -std=c++11 | Clang 3.3 |
C++98 / C++03 | -std=c++98 | Yes (other than export) |
-std=c++2c
option.
Language Feature | C++26 Proposal | Available in Clang? |
---|---|---|
Remove undefined behavior from lexing | P2621R2 (DR) | Clang 3.3 |
Making non-encodable string literals ill-formed | P1854R4 (DR) | Clang 14 |
Unevaluated strings | P2361R6 | Clang 18 |
Add @, $, and ` to the basic character set | P2558R2 | Yes |
constexpr cast from void* | P2738R1 | Clang 17 |
On the ignorability of standard attributes | P2552R3 (DR) | Yes |
Static storage for braced initializers | P2752R3 (DR) | No |
User-generated static_assert messages | P2741R3 | Clang 17 |
Placeholder variables with no name | P2169R4 | Clang 18 |
Template parameter initialization | P2308R1 (DR) | Clang 18 |
Pack Indexing | P2662R3 | Clang 19 |
Remove Deprecated Arithmetic Conversion on Enumerations | P2864R2 | Clang 18 |
Disallow Binding a Returned Glvalue to a Temporary | P2748R5 | Clang 19 |
Clarifying rules for brace elision in aggregate initialization | P3106R1 (DR) | Clang 17 |
Attributes for Structured Bindings | P0609R3 | Clang 19 |
Module Declarations Shouldn’t be Macros | P3034R1 (DR) | No |
Trivial infinite loops are not Undefined Behavior | P2809R3 (DR) | Clang 19 |
Erroneous behaviour for uninitialized reads | P2795R5 | No |
= delete("should have a reason"); | P2573R2 | Clang 19 |
Variadic friends | P2893R3 | No |
-std=c++23
option.
Language Feature | C++23 Proposal | Available in Clang? |
---|---|---|
Literal suffix uz, z for size_t, ssize_t | P0330R8 | Clang 13 |
Make () in lambdas optional in all cases | P1102R2 | Clang 13 |
Simpler implicit move | P2266R3 | Clang 13 |
if consteval | P1938R3 | Clang 14 |
Allow duplicate attributes | P2156R1 | Clang 13 |
Narrowing contextual conversions to bool | P1401R5 | Clang 14 |
Trimming whitespaces before line splicing | P2223R2 | Yes |
Make declaration order layout mandated | P1874R4 | Yes |
C++ identifier syntax using UAX 31 | P1949R7 | Clang 14 |
Mixed string literal concatenation | P2201R1 | Yes |
Deducing this | P0847R7 | Clang 18 |
P2797R0 | Clang 19 | |
Change scope of lambda trailing-return-type | P2036R3 | Clang 17 |
P2579R0 | ||
Multidimensional subscript operator | P2128R6 | Clang 15 |
Non-literal variables (and labels and gotos) in constexpr functions | P2242R3 | Clang 15 |
Character encoding of diagnostic text | P2246R1 | Yes |
Character sets and encodings | P2314R4 | Yes |
Consistent character literal encoding | P2316R2 | Yes |
Add support for preprocessing directives elifdef and elifndef | P2334R1 | Clang 13 |
Extend init-statement to allow alias-declaration | P2360R0 | Clang 14 |
auto(x): decay-copy in the language | P0849R8 | Clang 15 |
Attributes on Lambda-Expressions | P2173R1 | Clang 13 |
constexpr for <cmath> and <cstdlib> | P0533R9 | No |
Type trait to determine if a reference binds to a temporary | P2255R2 | Clang 19 |
The Equality Operator You Are Looking For | P2468R2 | Clang 16 |
De-deprecating volatile compound operations | P2327R1 | Clang 15 |
Support for #warning |
P2437R1 | Yes |
Remove non-encodable wide character literals and multicharacter wide character literals | P2362R3 | Clang 14 |
Labels at the end of compound statements | P2324R2 | Clang 16 |
Delimited escape sequences | P2290R3 | Clang 15 |
Named universal character escapes | P2071R2 | Clang 15 |
Relaxing some constexpr restrictions | P2448R2 | Clang 19 |
Using unknown pointers and references in constant expressions | P2280R4 (DR) | No |
static operator() |
P1169R4 | Clang 16 |
Extended floating-point types and standard names | P1467R9 | No |
Class template argument deduction from inherited constructors | P2582R1 | No |
Portable assumptions | P1774R8 | Clang 19 |
Support for UTF-8 as a portable source file encoding | P2295R6 | Clang 15 |
char8_t Compatibility and Portability Fix |
P2513R3 | Clang 16 |
Relax requirements on wchar_t to match existing practices |
P2460R2 | Yes |
Explicit lifetime management | P2590R2 | No |
static operator[] |
P2589R1 | Clang 16 |
Permitting static constexpr variables in constexpr functions | P2647R1 | Clang 16 |
consteval needs to propagate up | P2564R3 (DR) | Clang 17 |
Lifetime extension in range-based for loops | P2718R0 |
Clang 19 (Partial)The lifetime extension of temporaries bound to member references by default member initializers in aggregate initialization was not supported now. |
Referencing The Unicode Standard | P2736R2 | Yes |
-std=c++20
option
(use -
std=c++2a
in Clang 9 and earlier).
Language Feature | C++20 Proposal | Available in Clang? |
---|---|---|
Default member initializers for bit-fields | P0683R1 | Clang 6 |
const&-qualified pointers to members | P0704R1 | Clang 6 |
Allow lambda-capture [=, this] | P0409R2 | Clang 6 |
__VA_OPT__ for preprocessor comma elision | P0306R4 | Clang 6 |
P1042R1 | Clang 9 | |
Designated initializers | P0329R4 | Clang 10 |
template-parameter-list for generic lambdas | P0428R2 | Clang 9 |
Concepts | P0734R0 | Clang 10 |
P0857R0 | Clang 16 | |
P1084R2 | Clang 10 | |
P1141R2 | ||
P0848R3 | Clang 19 | |
P1616R1 | Clang 10 | |
P1452R2 | ||
P1972R0 | Clang 10 | |
P1980R0 | ||
P2103R0 | ||
P2493R0 | ||
P2092R0 | Clang 16 | |
P2113R0 | Clang 16 | |
Range-based for statements with initializer | P0614R1 | Clang 8 |
ADL and function templates that are not visible | P0846R0 | Clang 9 |
const mismatch with defaulted copy constructor | P0641R2 | Clang 8 |
Consistent comparison (operator<=>) | P0515R3 | Clang 10 |
P0905R1 | ||
P1120R0 | ||
P1185R2 | ||
P1186R3 | ||
P1630R1 | ||
P1946R0 | ||
P1959R0 | ||
P2002R1 | Clang 17 | |
P2085R0 | Clang 14 | |
Access checking on specializations | P0692R1 | Clang 14 |
Default constructible and assignable stateless lambdas | P0624R2 | Clang 8 |
Lambdas in unevaluated contexts | P0315R4 | Clang 17 |
[[no_unique_address]] attribute | P0840R2 | Clang 9 |
[[likely]] and [[unlikely]] attributes | P0479R5 | Clang 12 |
typename optional in more contexts | P0634R3 | Clang 16 |
Pack expansion in lambda init-capture | P0780R2 | Clang 9 |
Class types as non-type template parameters | P0732R2 | Clang 12 |
Generalized non-type template parameters of scalar type | P1907R1 |
Clang 18 (Partial)Reference type template arguments referring to instantiation-dependent objects and subobjects (i.e. declared inside a template but neither type- nor value-dependent) aren't fully supported. |
Destroying operator delete | P0722R3 | Clang 6 |
Relaxations of constexpr restrictions | P1064R0 | Clang 9 |
P1002R1 | Clang 8 | |
P1327R1 | Clang 9 | |
P1330R0 | ||
P1331R2 | Clang 10 | |
P1668R1 | ||
P0784R7 | ||
Prohibit aggregates with user-declared constructors | P1008R1 | Clang 8 |
Feature test macros | P0941R2 | (see below) |
explicit(bool) | P0892R2 | Clang 9 |
Signed integers are two's complement | P1236R1 | Clang 9 |
char8_t | P0482R6 | Clang 7 (11) |
Immediate functions (consteval) | P1073R3 | Clang 17 |
P1937R2 | Clang 14 | |
std::is_constant_evaluated | P0595R2 | Clang 9 |
Nested inline namespaces | P1094R2 | Clang 8 |
Structured binding extensions | P1091R3 | Clang 16 |
P1381R1 | ||
Stronger Unicode requirements | P1041R4 | Yes |
P1139R2 | ||
Parenthesized initialization of aggregates | P0960R3 | Clang 16 |
P1975R0 | ||
Modules | P1103R3 | Clang 15 |
P1766R1 (DR) | Clang 11 | |
P1811R0 | No | |
P1703R1 | Subsumed by P1857 | |
P1874R1 | Clang 15 | |
P1979R0 | No | |
P1779R3 | Clang 15 | |
P1857R3 | No | |
P2115R0 | Partial | |
P1815R2 | Partial | |
P2615R1 (DR) | No | |
P2788R0 (DR) | No | |
Coroutines | P0912R5 |
PartialFully supported on all targets except Windows, which still has some stability and ABI issues. |
Deprecate a[b,c] | P1161R3 | Clang 9 |
Deprecate some problematic uses of volatile | P1152R4 | Clang 10 |
[[nodiscard("with reason")]] | P1301R4 | Clang 9 |
using enum | P1099R5 | Clang 13 |
Class template argument deduction for aggregates | P1816R0 | Clang 17 |
P2082R1 | ||
Class template argument deduction for alias templates | P1814R0 |
Clang 19 (Partial)This feature has been initially completed, but the feature macro __cpp_deduction_guides has not been updated. |
Permit conversions to arrays of unknown bound | P0388R4 | Clang 14 |
constinit | P1143R2 | Clang 10 |
Pseudo-destructors end object lifetimes | P0593R6 (DR) | Clang 11 |
More implicit moves | P1825R0 (DR) | Clang 13 |
-std=c++1
7
option
(use -std=c++1z
in Clang 4 and earlier).
Language Feature | C++17 Proposal | Available in Clang? |
---|---|---|
static_assert with no message | N3928 | Clang 3.5 |
Disabling trigraph expansion by default | N4086 | Clang 3.5 |
typename in a template template parameter | N4051 | Clang 3.5 |
New auto rules for direct-list-initialization | N3922 | Clang 3.8 (8) |
Fold expressions | N4295 | Clang 3.6 |
P0036R0 | Clang 3.9 | |
u8 character literals | N4267 | Clang 3.6 |
Nested namespace definition | N4230 | Clang 3.6 |
Attributes for namespaces and enumerators | N4266 | Clang 3.6 |
Allow constant evaluation for all non-type template arguments | N4268 | Clang 3.6 |
Remove deprecated register storage class | P0001R1 | Clang 3.8 |
Remove deprecated bool increment | P0002R1 | Clang 3.8 |
Make exception specifications part of the type system | P0012R1 | Clang 4 |
__has_include in preprocessor conditionals | P0061R1 | Yes |
[[fallthrough]] attribute | P0188R1 | Clang 3.9 |
[[nodiscard]] attribute | P0189R1 | Clang 3.9 |
P1771R1 (DR) | Clang 9 | |
[[maybe_unused]] attribute | P0212R1 | Clang 3.9 |
Aggregate initialization of classes with base classes | P0017R1 | Clang 3.9 |
constexpr lambda expressions | P0170R1 | Clang 5 |
Differing begin and end types in range-based for | P0184R0 | Clang 3.9 |
Lambda capture of *this | P0018R3 | Clang 3.9 |
Direct-list-initialization of enums | P0138R2 | Clang 3.9 |
Hexadecimal floating-point literals | P0245R1 | Yes |
Using attribute namespaces without repetition | P0028R4 | Clang 3.9 |
Dynamic memory allocation for over-aligned data | P0035R4 | Clang 4 |
Template argument deduction for class templates | P0091R3 | Clang 5 |
P0512R0 | ||
P0620R0 (DR) | Clang 7 | |
P0702R1 (DR) | Clang 6 | |
Non-type template parameters with auto type | P0127R2 | Clang 4 |
Guaranteed copy elision | P0135R1 | Clang 4 |
Stricter expression evaluation order | P0145R3 | Clang 4 (9) |
P0400R0 | ||
Requirement to ignore unknown attributes | P0283R2 | Yes |
constexpr if-statements | P0292R2 | Clang 3.9 |
Inline variables | P0386R2 | Clang 3.9 |
Structured bindings | P0217R3 | Clang 4 |
P0961R1 (DR) | Clang 8 | |
P0969R0 (DR) | Clang 8 | |
Separate variable and condition for if and switch | P0305R1 | Clang 3.9 |
Matching template template parameters to compatible arguments | P0522R0 (DR) | Clang 19 (10) |
Removing deprecated dynamic exception specifications | P0003R5 | Clang 4 |
Pack expansions in using-declarations | P0195R2 | Clang 4 |
-std=c++14
option
(use -
std=c++1y
in Clang 3.4 and earlier).
Language Feature | C++14 Proposal | Available in Clang? |
---|---|---|
Tweak to certain C++ contextual conversions | N3323 | Clang 3.4 |
Binary literals | N3472 | Clang 2.9 |
decltype(auto) | N3638 | Clang 3.3 |
Return type deduction for normal functions | Clang 3.4 | |
Initialized lambda captures | N3648 | Clang 3.4 |
Generic lambdas | N3649 | Clang 3.4 |
Variable templates | N3651 | Clang 3.4 |
Relaxing requirements on constexpr functions | N3652 | Clang 3.4 |
Member initializers and aggregates | N3653 | Clang 3.3 |
Clarifying memory allocation | N3664 | Clang 3.4 |
[[deprecated]] attribute | N3760 | Clang 3.4 |
Single quotation mark as digit separator | N3781 | Clang 3.4 |
C++ Sized Deallocation | N3778 | Clang 3.4 (7) |
lib
stdc++
added these functions in version 5.0, and
libc++
added them in version 3.7. The user can also use the
-fno-sized-dealloca
tion
option to disable sized deallocation.
-std=c++11
option. Clang's C++11 mode can be used with
libc++ or with gcc's libstdc++.
Language Feature | C++11 Proposal | Available in Clang? |
---|---|---|
Rvalue references | N2118 | Clang 2.9 |
P1825R0 (DR) | Clang 13 | |
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 | Clang 3.1 |
P1009R2 (DR) | Clang 9 | |
P1957R2 (DR) | Clang 11 | |
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 | Clang 3.1 |
P0588R1 (DR) | No | |
Declared type of an expression | N2343 | Clang 2.9 |
Incomplete return types | N3276 | Clang 3.1 |
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 |
Clang 3.1 |
Standardized attribute syntax | N2761 | Clang 3.3 (1) |
Generalized constant expressions | N2235 | Clang 3.1 |
P0859R0 (DR) | Clang 8 | |
Alignment support | N2341 | Clang 3.3 |
Conditionally-support behavior | N1627 | Clang 2.9 |
Changing undefined behavior into diagnosable errors | N1727 | Clang 2.9 |
Delegating constructors | N1986 | Clang 3.0 |
Inheriting constructors | N2540 | Clang 3.3 |
P0136R1 (DR) | Clang 3.9 | |
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 | Clang 3.1 |
User-defined literals | N2765 | Clang 3.1 |
Standard Layout Types | N2342 | Clang 3.0 |
Defaulted functions | N2346 | Clang 3.0 |
P1286R2 (DR) | Clang 9 | |
Deleted functions | N2346 | Clang 2.9 |
Extended friend declarations | N1791 | Clang 2.9 |
Extending sizeof |
N2253
DR850 |
Clang 3.1 |
Inline namespaces | N2535 | Clang 2.9 |
Unrestricted unions | N2544 | Clang 3.1 |
Local and unnamed types as template arguments | N2657 | Clang 2.9 |
Range-based for | N2930 | Clang 3.0 |
P0962R1 (DR) | Clang 8 | |
Explicit virtual overrides | N2928
N3206 N3272 |
Clang 3.0 |
Minimal support for garbage collection and reachability-based leak detection | N2670 | N/A (2) |
Allowing move constructors to throw [noexcept] | N3050 | Clang 3.0 |
Defining move special member functions | N3053 | Clang 3.0 |
Concurrency | ||
Sequence points | N2239 | Clang 3.3 |
Atomic operations | N2427 | Clang 3.1 |
Strong Compare and Exchange | N2748 | Clang 3.1 (3) |
Bidirectional Fences | N2752 | Clang 3.1 |
Memory model | N2429 | Clang 3.2 |
Data-dependency ordering: atomics and memory model | N2664 | Clang 3.2 (4) |
Propagating exceptions | N2179 | Clang 2.9 |
Allow atomics use in signal handlers | N2547 | Clang 3.1 |
Thread-local storage | N2659 | Clang 3.3 (5) |
Dynamic initialization and destruction with concurrency | N2660 | Clang 2.9 |
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 | N/A (6) |
[[carries_dependency]]
attribute
has no effect.
(2): No compiler changes are required for an implementation
such as Clang that does not provide garbage collection.
(3): All compare-exchange operations are emitted as
strong compare-exchanges.
(4): memory_order_consume
is lowered to
memory_order_acquire
.
(5): thread_local
support
requires a C++ runtime library providing __cxa_thread_atexit
, such
as libc++abi 3.6 or later,
or libsupc++ 4.8 or later.
(6): No compiler changes are required for an implementation
such as Clang that does not provide any extended integer types.
__int1
28
is not treated as an extended integer type,
because changing i
ntmax_t
would be an ABI-incompatible
change.
Document | Latest draft | Compiler flag | Available in Clang? |
---|---|---|---|
SD-6: SG10 feature test recommendations | SD-6 | N/A | Clang 3.4 (N3745) |
Clang 3.6 (N4200) | |||
Clang 4 (P0096R3) | |||
Clang 5 (P0096R4) | |||
Clang 7 (P0096R5) | |||
Clang 9 (P1353R0) | |||
Clang 10 (P1902R1) | |||
[TS] Concepts | P0121R0 | Superseded by P0734R0 | |
[TS] Coroutines | N4663 | -fcoroutines-ts -stdlib=libc++ |
Clang 5 |
-std=c++20 -stdlib=libc++ |
Superseded by P0912R5 | ||
[TS] Library Fundamentals, Version 1 (invocation type traits) | N4480 | N/A | No |
[TS] Library Fundamentals, Version 2 (source_location) | N4617 | N/A | Clang 9 (documentation) |
[TS] Modules | N4720 | -fmodules-ts | Superseded by P1103R3 |
[DRAFT TS] Reflection | N4818 | No | |
[TS] Transactional Memory | N4514 | No |