cppstat C++ Compiler Support Status

This site lists C++ features and their respective support by compilers and standard library implementations, designed as a simple, quickly searchable table. It's regularly updated and maintained as best as possible. If you see incorrect information or something missing, feel free to send a mail or submit a ticket.

Last updated on November 12, 2025 (changes)

All features
Language features only
Library features only

Features

Preferences

Note

cppstat uses the browser's local storage in order to persist user preferences. This will store the preferences on your device locally, only. You may delete these preferences from your device at any time. By clicking the "Save" button, you agree and consent to these terms.

Color Vision Deficiency:


Help

  • x.y.z The feature is fully supported by the toolchain starting with version x.y.z.
  • x.y.z The feature is only partially supported by the toolchain starting with version x.y.z.
  • The feature is not supported by the toolchain (yet).
  • You can click on the individual table cells to see more information about them, e.g. release dates and why a feature is partially supported.
  • Entries marked with a '*' have a remark behind them, which you can see by clicking on the entry.

Filtering

Features can be filtered by toolchains. By default, no toolchain filters are enabled, which will list all available features. If at least one toolchain switch is active, features will be limited to the specified toolchain and version next to the toolchain toggle.

The following operators are supported: !, =, >, >=, <, <=

The ! operator takes no version number and will show features that are not supported by that particular toolchain (negative filter).

Examples:

  • =15: List features that are supported by version 15.
  • <13.3: List features that are supported by version below 13.3.
  • >=11: List features that are supported by version starting at 11.
  • !: List features that are not supported by the toolchain.
Feature C++ Paper(s) GCC
libstdc++
Clang
libc++
MSVC
STL
Xcode
libc++
Reflection for C++26 (<meta>)InfoInfo
26P2996
Annotations for ReflectionInfo
26P3394
Splicing a base class subobjectInfo
26P3293
define_static_{string,object,array}InfoInfo
26P3491
Function Parameter Reflection in Reflection for C++26Info
26P3096
Expansion Statements (template for)Info
26P1306
16
Error Handling in ReflectionInfoInfo
26P3560
constexpr virtual inheritanceInfo
26P3533
16
Contracts for C++ (<contracts>)Info
26P2900
Standard library hardeningInfoInfo
26P3471
15
18
19.44
16
Minor additions to C++26 standard library hardeningInfoInfo
26P3697
19.50
Trivial Relocatability For C++26Info
26P2786
16*
21
26P2662
15
19
16.3
constexpr cast from void*: towards constexpr type-erasureInfo
26P2738
14
17
16.3
Static storage for braced initializers26P2752
14
User-generated static_assert messagesInfo
26P2741
14
17
16.3
A nice placeholder with no name (using _ as a variable name)Info
26P2169
14
18
16.3
#embed - a scannable, tooling-friendly binary resource inclusion mechanismInfo
26P1967
15*
19*
16.3*
On the ignorability of standard attributes26P2552
15
Yes
16.3
Remove deprecated arithmetic conversion on enumerations26P2864
14
18
16.3
UB? In My Lexer? (Remove undefined behavior from lexing)26P2621
Yes
3.3
16
Template parameter initialization26P2308
9
18
16.3
Disallow binding a returned glvalue to a temporary26P2748
14
19
16.3
Attributes for structured bindingsInfo
26P0609
15
19
16.3
Making non-encodable string literals ill-formed26P1854
14
14
16
Unevaluated strings26P2361
14
17
18
16
Add @, $, and ` to the basic character set26P2558
15
Yes
15
Erroneous behavior for uninitialized reads (and [[indeterminate]] attribute)26P2795
16
= delete("should have a reason");Info
26P2573
15
19
16.3
Clarifying rules for brace elision in aggregate initialization26P3106
Yes
17
16.3
Module declarations shouldn't be macros26P3034
15
constexpr std::shared_ptr and friendsInfoInfo
26P3037
Trivial infinite loops are not undefined behaviorInfo
26P2809
14
19
16.3
constexpr placement newInfo
26P2747
15
20
26
Structured binding declaration as a conditionInfo
26P0963
15
6
21
std::optional<T&>InfoInfo
26P2988
22
Debugging support (<debugging>)InfoInfo
26P2546
P2810
16*
Variadic friendsInfo
26P2893
15
20
26P3383
dextents index type parameter (std::dims)InfoInfo
26P2389
16
19
Padded std::mdspan layoutsInfoInfo
26P2642
Better mdspan's CTADInfo
26P3029
16
19
26P2927
Inspecting std::exception_ptr should be constexprInfo
26P3748
Standardized constexpr type orderingInfo
26P2830
execution::write_env and unstoppable sender adaptorsInfo
26P3284
Parallel range algorithmsInfo
26P3179
26P3709
Rename std::observable() to std::observable_checkpoint(), and add a feature-test macroInfo
26P3641
std::string::subview()Info
26P3044
22
Interleaved complex values support in std::simdInfo
26P2663
Extend <bit> header function with overloads for std::simdInfo
26P2933
Proposal to extend std::simd with more constructors and accessorsInfo
26P2876
std::simd is a rangeInfoInfo
26P3480
Extend std::simd with permutation APIInfoInfo
26P2664
Reconsider naming of the namespace for std::simdInfo
26P3691
std::optional variants in sender/receiverInfoInfo
26P3570
26P3481
Allocator support for operation statesInfo
26P3433
async_scope - Creating scopes for non-sequential concurrencyInfoInfo
26P3149
Remove std::execution::split()Info
26P3682
Parallel schedulerInfoInfo
26P2079
Make type-erased allocator use in std::promise and std::packaged_task consistentInfo
26P3503
19.51
Atomic floating-point min/maxInfoInfo
26P3008
Atomic reduction operationsInfoInfo
26P3111
Add std::views::indices(n)InfoInfo
26P3060
22
Prevent path presentation problemsInfoInfo
26P2319
Making std::istream::ignore less surprisingInfo
26P3223
22
19.50
std::constant_wrapperInfoInfo
26P2781
16
High-quality sender diagnostics with constexpr exceptionsInfo
26P3557
Preprocessing is never undefined26P2843
16
Add a coroutine task typeInfoInfo
26P3552
Remove return type deduction in std::apply()InfoInfo
26P1317
Ordering of constraints involving fold expressionsInfo
26P2963
19
16.3
Deleting a pointer to an incomplete type should be ill-formed26P3144
15
19
16.3
Structured bindings can introduce a packInfo
26P1061
16
21
constexpr structured bindings and references to constexpr variables26P2686
16
22
Allowing exception throwing in constant-evaluation (constexpr exceptions)Info
26P3068
16
The Oxford variadic comma26P3176
15
20
Remove deprecated array comparisons from C++2626P2865
15
20
16
C++26 should refer to C23 not C17Info
26P3348
Concept and variable-template template-parametersInfo
26P2841
Trivial unions (was std::uninitialized<T>)Info
26P3074
Partial program correctness (std::observable())26P1494
16
Testing for success or failure of <charconv> functionsInfoInfo
26P2497
14
18
std::text_encoding: text encodings identificationInfoInfo
26P1885
P2862
14
to_string or not to_string (Arithmetic overloads of std::to_string() and std::to_wstring() use std::format())InfoInfo
26P2587
14
Type checking format argsInfoInfo
26P2757
15
Formatting pointersInfoInfo
26P2510
14
17
19.40
Hashing support for chrono value classesInfoInfo
26P2592
Read-copy update (RCU) (<rcu>)InfoInfo
26P2545
Hazard pointers (<hazard_pointer>)InfoInfo
26P2530
ADL-proof std::projectedInfo
26P2538
14
18
19.38
16
constexpr stable sortingInfoInfo
26P2562
15
21
Member visit (std::variant::visit())InfoInfo
26P2637
15
19
16.3
Checking if a union alternative is active (std::is_within_lifetime())InfoInfo
26P2641
22
Extending associative containers with the remaining heterogeneous overloadsInfoInfo
26P2363
Enabling the use of std::weak_ptr as keys in unordered associative containersInfoInfo
26P1901
16
Native handles and file streamsInfoInfo
26P1759
14
18
16
Interfacing stringstreams with std::string_viewInfoInfo
26P2495
16
19
16.3
Interfacing std::bitset with std::string_viewInfoInfo
26P2697
18
16
More constexpr for <cmath> and <complex>InfoInfo
26P1383
4.6
Adding the new 2022 SI prefixes (std::quecto, std::ronto, std::ronna, std::quetta)InfoInfo
26P2734
14
17
std::function_ref: type-erased callable referenceInfoInfo
26P0792
26P2548
16
Bind front and back to NTTP callables (std::bind_front(), std::bind_back(), std::not_fn)InfoInfo
26P2714
20
std::submdspan()InfoInfo
26P2630
P3355
Freestanding language: Optional ::operator newInfo
26P2013
Freestanding std::char_traits, std::errc and facilities in: <charconv>, <cstdlib>, <cstring>, <cwchar>InfoInfo
26P2338
Freestanding Feature-Test Macros and Implementation-Defined ExtensionsInfoInfo
26P2198
Saturation arithmeticInfoInfo
26P0543
14
18
16
A free function linear algebra interface based on the BLAS (<linalg>)InfoInfo
26P1673
P3050
P3222
Make assert() macro user friendly for C and C++Info
26P2264
Runtime format strings (std::format())InfoInfo
26P2905
14
18
19.40
16
Runtime format strings II (std::format())InfoInfo
26P2918
14
18
16
std::span over an initializer listInfoInfo
26P2447
15
18
16
26P2821
14
18
16
Add tuple protocol to complexInfoInfo
26P2819
15
19
16.3
A new specification for std::generate_canonical()Info
26P0952
19.42
Remove deprecated std::allocator typedef from C++26 (std::allocator::is_always_equal())Info
26P2868
15
18
16
26P2870
18
16
Remove deprecated Unicode conversion facets from C++26 (<codecvt>)Info
26P2871
18
16
Freestanding: Remove strtok()InfoInfo
26P2937
14
19.40
Freestanding library: Partial ClassesInfoInfo
26P2407
14
19.40
Freestanding library: std::inout, std::expected, std::spanInfoInfo
26P2833
14
19.42
std::basic_const_iterator should follow its underlying type's convertibilityInfoInfo
26P2836
P2950
14
19.40
std::make_format_args() now accepts only lvalue references instead of forwarding referencesInfo
26P2905
14
18
19.40
16
Fix formatting of code units as integers (Dude, where's my char?)InfoInfo
26P2909
13.3
18
19.40
16
26P2542
15
Concatenation of std::string and std::string_viewInfoInfo
26P2591
15
19
16.3
Enabling list-initialization for algorithmsInfoInfo
26P2248
P3217
15
Vector API for random number generation (ranges::generate_random())InfoInfo
26P1068
Comparisons for std::reference_wrapper (and constraints for comparisons of std::pair, std::tuple, std::optional, and std::variant)InfoInfo
26P2944
14
19
22*
Atomic minimum/maximumInfoInfo
26P0493
Formatting of filesystem::path (std::formatter<filesystem::path>)InfoInfo
26P2845
Printing blank lines with std::println()InfoInfo
26P3142
14
19
19.41
16.3
26P2875
15
19.41
Remove deprecated strstreams from C++26Info
26P2867
19
Remove deprecated std::shared_ptr atomic access APIs from C++26Info
26P2869
Remove std::wstring_convert from C++26Info
26P2872
19
Permit an efficient implementation of std::print()InfoInfo
26P3107
P3235
19.43
Remove nodiscard annotations from the standard library specificationInfo
26P2422
19*
26P2300
P3396
std::inplace_vector: dynamically-resizable vector with fixed capacity (<inplace_vector>)InfoInfo
26P0843
Philox as an extension of the C++ RNG engines (std::philox_engine)InfoInfo
26P2075
Give std::optional range supportInfoInfo
26P3168
22
A type trait for detecting virtual base classes (std::is_virtual_base_of)InfoInfo
26P2985
15
20
26
Make std::ignore a first-class objectInfo
26P2968
15
19
19.42
Removing the common reference requirement from the indirectly invocable conceptsInfo
26P2997
15
19
19.42
Deprecate the notion of trivial types (std::is_trivial and std::is_trivial_v)Info
26P3247
15
21
Retiring niebloidsInfo
26P3136
Yes
14
19.39
14.3
26P3138
15
Constrain std::expected equality operatorsInfoInfo
26P3379
15
21
std::aligned_accessor: An std::mdspan accessor expressing pointer over-alignment (and std::is_sufficiently_aligned())InfoInfo
26P2897
16
21
Expose std::atomic_ref's object address (std::atomic_ref::address())InfoInfo
26P2835
22
cv-qualified types in std::atomic and std::atomic_refInfo
26P3323
19.44
26P3309
Wording for "constexpr for specialized memory algorithms"InfoInfo
26P3508
15
26P3369
Add new library headers from C23 (<stdbit.h> and <stdckdint.h>)Info
26P3370
15
std::simd (<simd>)InfoInfo
26P1928
Rename simd_split() to simd_chunk()Info
26P3441
Utility for creating execution environmentsInfo
26P3325
constexpr exception typesInfoInfo
26P3378
Defang and deprecate std::memory_order::consumeInfo
26P3475
26P0472
15
21
19.50
std::indirect and std::polymorphic: Vocabulary Types for Composite Class DesignInfoInfo
26P3019
16
constexpr containers and adaptorsInfoInfo
26P3372
constexpr std::inplace_vector for non-trivial typesInfoInfo
26P3074
26P3137
15
ranges::approximately_sized_range and ranges::reserve_hint()InfoInfo
26P2846
26P0447
Freestanding library: <algorithm>, <numeric>, and <random>InfoInfo
26P2976
Converting contiguous iterators to pointersInfo
26P3349
15
19.51
Allow attaching main to the global module26P3618
16
21
Literal suffix for (signed) size_t (uz/t)Info
23P0330
11
13
19.43
13.4.1
Down with ()! (relax () rules for lambdas)23P1102
11
13
19.44
13.4.1
if constevalInfo
23P1938
12
14
19.44
14
Removing garbage collection support23P2186
12
Yes
19.30
Yes
Narrowing contextual conversions to bool (in static_assert and constexpr if)23P1401
9
13
14
19.21*
19.32
14
Trimming whitespaces before line splicing23P2223
Yes
Yes
Yes
Make declaration order layout mandated23P1847
Yes
Yes
19.30
Yes
Remove mixed wide string literal concatenation23P2201
Yes
Yes
Yes
Yes
Explicit object member functions (deducing this)Info
23P0847
14
18
19
19.32
19.43
16.3
Proposed resolution for CWG2692 static and explicit object member functions with the same parameter-type-lists23P2797
14
19
19.50
16.3
Decay-copy in the language (auto(x) and auto{x})Info
23P0849
12
15
19.50
14.3
Add support for preprocessing directives #elifdef and #elifndef23P2334
12
13
19.40
13.4.1
Non-literal variables (and labels and gotos) in constexpr functionsInfo
23P2242
12
15
19.43
14.3
Consistent character literal encoding23P2316
Yes
Yes
19.30
Yes
Character sets and encodings23P2314
10
Yes
Yes
Extend init-statement (of for loop) to allow alias-declaration23P2360
12
14
19.50*
14
Multidimensional subscript operator (operator[x, y])Info
23P2128
12
15
19.42
14.3
Attributes on lambdas23P2173
9
13
19.44
13.4.1
#warning23P2437
13
Yes
19.50
15
Remove non-encodable wide character literals and multicharacter wide character literals23P2362
13
14
15
Labels at the end of compound statements23P2324
13
16
16
Delimited escape sequences23P2290
13
15
19.50
15
Named universal character escapesInfo
23P2071
13
15
15
Relaxing some constexpr restrictionsInfo
23P2448
13
19
16.3
Simpler implicit moveInfo
23P2266
13
13
26
static operator() (static call operator)Info
23P1169
13
16
19.44
16
Requirements for optional extended floating-point types23P1467
13
Yes
Class template argument deduction from inherited constructors23P2582
14
Attribute [[assume]]23P1774
13
19
16.3
Support for UTF-8 as a portable source file encodingInfo
23P2295
13
15
19
15
static operator[]Info
23P2589
13
16
19.44
16
Permitting static constexpr variables in constexpr functionsInfo
23P2647
13
16
16
Extending the lifetime of temporaries in range-based for loop initializerInfo
23P2644
P2718
15
19
16.3
Declarations and where to find them23P1787
Change scope of lambda trailing-return-type23P2036
P2579
16
17
16.3
Meaningful exports23P2615
15
17
consteval needs to propagate upInfo
23P2564
14
17
16
C++ identifier syntax using Unicode Standard Annex 3123P1949
12
14
14
Allow duplicate attributes23P2156
11
13
13.4.1
Adjusting the value of feature-test macro __cpp_concepts23P2493
12
19
19.32
16.4
Relax requirements on wchar_t to match existing practices23P2460
Yes
Yes
Yes
15
Using unknown pointers and references in constant expressions23P2280
14
20
19.50
The equality operator you are looking for23P2468
13
16
16
char8_t compatibility and portability fixInfo
23P2513
13
16
19.34
16
23P0881
12
14
19.34
Add a pmr alias for std::stacktraceInfoInfo
23P2301
12
14
19.34
23P0943
12
15
19.31
14.3
23P1048
11
12
19.30
13
23P1679
11
12
19.30
13
23P1682
11
13
19.30
13.4.1
Relaxing requirements for chrono::time_point::clockInfo
23P2212
Providing size feedback in the Allocator interfaceInfoInfo
23P0401
15
19.30
14.3
<spanstream>: stringstream with std::span-based bufferInfoInfo
23P0448
12
19.31
out_ptr - a scalable output pointer abstraction (std::out_ptr() and std::inout_ptr())InfoInfo
23P1132
14
19
19.30
16.4
constexpr std::type_info::operator==()InfoInfo
23P1328
12
17
19.33
19.34
15
Iterator pair constructors for std::stack and std::queueInfoInfo
23P1425
12
14
19.31
14.3
Non-deduction context for allocators in container deduction guidesInfo
23P1518
12
13
19.31
13.4.1
23P1659
16
17
19
19.31
16
Prohibiting std::basic_string and std::basic_string_view construction from nullptrInfo
23P2166
12
13
19.30
13.4.1
23P2136
12
17
19.31
15
Range constructor for std::basic_string_viewInfo
23P1989
11
14
19.30
14.3
Default template arguments for std::pair's forwarding constructorInfo
23P1951
14
14
19.30
14.3
Remove garbage collection and reachability-based leak detection (library support)Info
23P2186
12
14
19.30
14.3
23P2321
13
15
19.33
14.3
Heterogeneous erasure overloads for associative containersInfoInfo
23P2077
19.32
23P1272
12
14
19.31
14.3
Printing volatile T*Info
23P1147
11.3
14
19.31
14.3
23P1072
12
14
19.31
14.3
Monadic operations for std::optional (and_then(), or_else(), transform())InfoInfo
23P0798
12
14
19.32
14.3
23P0288
12
19.32
Add a conditional noexcept specification to std::exchange()Info
23P2401
12
14
19.25
14.3
23P2251
Yes
Yes
Yes
Yes
Clarifying the status of the "C headers"Info
23P2340
Yes
Yes
Yes
Yes
23P0323
P2549
12
16
19.33
15
constexpr for <cmath> and <cstdlib>InfoInfo
23P0533
23P0627
12
15
19.32
14.3
23P1413
13
16
19.33
A type trait to detect reference binding to temporaryInfoInfo
23P2255
13
14
21
19.50
16.3
constexpr std::unique_ptrInfoInfo
23P2273
12
16
19.33
15
Constructing containers and strings from ranges with ranges::to(), tagged constructors, insert and assign member functionsInfoInfo
23P1206
14
15
17
19.34
15
Pipe support for user-defined range adaptors (ranges::range_adaptor_closure and std::bind_back())InfoInfo
23P2387
13
14
19
19.34
16.3
23P2440
13
21
19.34
23P2441
13
21
19.34
23P2442
13
19.33
23P2443
13
18
19.33
16
std::mdspan: a non-owning multidimensional array reference (<mdspan>)InfoInfo
23P0009
P2599
P2604
P2613
P2763
16
18
19.39
15
Referencing the Unicode StandardInfo
23P2736
19
16
De-deprecating volatile compound operations.Info
23P2327
15
23P0429
15
20
26
23P1222
15
21
23P1223
13
19
19.36
16.3
Freestanding library: Easy <utility>, <ranges> and <iterator>Info
23P1642
13
stride_view (views::stride())InfoInfo
23P1899
13
19.34
Compatibility between std::tuple and tuple-like objectsInfoInfo
23P2165
14
2.9
19.36
19.37
Yes
Rectifying constant iterators, sentinels and ranges (views::as_const())InfoInfo
23P2278
13
19.35
19.36
Formatting rangesInfoInfo
23P2286
15
15.2
16
19.37
19.39
19.41
19.42
15
Improve default container formattingInfoInfo
23P2585
15
16
17
15
Formatted output library (<print>)InfoInfo
23P2093
P2539
14
17
18
19.37
15
16
23P2693
14
17
19.38
15
constexpr for integral overloads of std::to_chars() and std::from_chars()InfoInfo
23P2291
13
16
19.34
15
23P2302
13
18
19
19.34
16
16.3
Ranges fold algorithmsInfoInfo
23P2322
13
19.35
23P2374
P2540
13
19.37
Adding move-only types support for comparison concepts (std::equality_comparable, std::totally_ordered, std::three_way_comparable)InfoInfo
23P2404
19.36
Ranges iterators as inputs to non-ranges algorithmsInfoInfo
23P2408
19.34
constexpr std::bitsetInfoInfo
23P2417
13
16
19.34
15
std::basic_string::substr() &&Info
23P2438
16
19.34
15
23P2446
13
16
19.34
15
Standard library modules (import std)InfoInfo
23P2465
15*
17
19
19.35
19.36
23P2445
14
16
19.34
15
Support exclusive mode for std::fstreamInfoInfo
23P2467
12
18
19.36
16
23P2474
13
17
19.36
15
Relaxing range adaptors to allow for move-only typesInfoInfo
23P2494
14
17
19.34
15
std::basic_string_view range constructor should be explicitInfo
23P2499
12.2
16
19.34
15
std::generator: synchronous coroutine generator for rangesInfoInfo
23P2502
P2787
14
19.43
Add a conditional noexcept specification to std::apply()Info
23P2517
10
18
19.34
16
Explicit lifetime management (std::start_lifetime_as())InfoInfo
23P2590
P2679
16
Clarify handling of encodings in localized formatting of chrono typesInfoInfo
23P2419
15
19.34
std::move_iterator<T*> should be a random access iteratorInfoInfo
23P2520
12.3
17
19.34
15
Deduction guides update for static operator()Info
23P1169
13
16
19.39
15
Standard names and library support for extended floating-point typesInfo
23P1467
13
19.37
Monadic operations for std::expected (and_then(), or_else(), transform())InfoInfo
23P2505
13
17
19.36
15
23P2164
13
19.37
A trait for implicit lifetime types (std::is_implicit_lifetime)InfoInfo
23P2674
20
19.50
26
std::common_reference_t of std::reference_wrapper should be a reference typeInfoInfo
23P2655
21*
19.37
Disallowing user specialization of std::allocator_traitsInfo
23P2652
19
19.37
23P2614
18
19.37
16
Making multi-param constructors of views explicitInfo
23P2711
17
19.36*
15
Relaxing Ranges Just A SmidgeInfoInfo
23P2609
15
20
19.37
26
Stashing stashing iterators for proper flatteningInfo
23P2770
14
21
19.37
std::visit() for classes derived from std::variantInfoInfo
23P2162
11.3
13
19.20
19.30
Conditionally borrowed rangesInfo
23P2017
11
16
19.30
Repairing input range adaptors and std::counted_iteratorInfo
23P2259
12
19.30
19.31
views::join() should join all views of rangesInfo
23P2328
11.2
15
19.30
14.3
Views should not be required to be default-constructibleInfoInfo
23P2325
11.3
16
19.30
15
Range adaptor objects bind arguments by valueInfo
23P2281
11
14
19.29
19.31
14.3
constexpr for std::optional and std::variantInfoInfo
23P2231
11.3
12
13
19
19.31
13.4.1
16.3
Superior string splitting (views::lazy_split() and redesigned views::split())Info
23P2210
12
16
19.31
15
23P2432
12
16
19.31
15
What is a view?Info
23P2415
12
14
19.31
14.3
Fixing locale handling in chrono formattersInfo
23P2372
13
21
19.31
Cleaning up integer-class typesInfo
23P2393
19.32
std::format() improvementsInfo
23P2216
13
15
19.32
14.3
Add support for std::generator-like types to std::format()Info
23P2418
13
15
19.32
14.3
23P2508
13
15
19.35
14.3
Poison Pills are Too ToxicInfoInfo
23P2602
14
19
19.36
16.3
std::format() fill character allowancesInfo
23P2572
14
17
19.37
Improving std::format()'s width estimationInfo
23P2675
14
17
19.38
std::barrier's phase completion guaranteesInfoInfo
23P2588
19.28*
19.36
Allow Lambda capture [=, this]20P0409
8
6
19.22
10
__VA_OPT__20P0306
P1042
8
10
12
9
19.21
12
Designated initializersInfo
20P0329
4.7
8
3
10
19.21
12
Familiar template syntax for generic lambdas (template-able lambdas)Info
20P0428
8
9
19.22
11
Default member initializers for bit-fields20P0683
8
6
19.25
10
Initializer list constructors in class template argument deduction20P0702
8
6
19.14
Yes
const&-qualified pointers to members20P0704
8
6
19.0
10
ConceptsInfo
20P0734
5
10
10
19.23
12
Wording for lambdas in unevaluated contexts20P0315
9
13
14
17
19.28
13.4.1
Three-way comparison operator (operator<=>)Info
20P0515
10
8
10
19.20
12
Simplifying implicit lambda capture20P0588
8
19.24
init-statements for range-based for20P0614
9
8
19.25
11
Default constructible and assignable stateless lambdas20P0624
9
8
19.22
10.2
const mismatch with defaulted copy constructor20P0641
9
8
19.0
10.2
Access checking on specializations20P0692
Yes
8
14
19.26
14
ADL and function templates that are not visible20P0846
9
9
19.21
11.4
Specify when constexpr function definitions are needed for constant evaluationInfo
20P0859
5.2
9
8
19.27
19.31
11
Fixing functionality gaps in constraints20P0857
10
16
19.23
12
Attributes [[likely]] and [[unlikely]]20P0479
9
12
19.26
13
Down with typename!20P0634
9
16
19.29
16
Pack-expansions in lambda init-capturesInfo
20P0780
9
9
19.22
11.4
Language support for empty objects ([[no_unique_address]] attribute)20P0840
9
9
19.28
11.4
Conditionally trivial special member functionsInfo
20P0848
10
16
19.28
16.3
Relaxing the structured bindings customization point finding rules20P0961
8
8
19.20
10.2
Relaxing the range-for loop customization point finding rules20P0962
8
8
19.25
11
Allow structured bindings to accessible members20P0969
8
8
19.20
10.2
Destroying operator deleteInfo
20P0722
9
6
19.27
10
Class types in non-type template parameters20P0732
9
12
19.26
19.28
13
16.3
Deprecate implicit capture of this via [=]20P0806
9
7
19.22
10.2
explicit(bool)Info
20P0892
9
9
19.24
11.4
Integrating feature-test macros20P0941
5
3.4
19.15
19.20
Yes
Prohibit aggregates with user-declared constructors20P1008
9
8
19.20
10.2
Allowing virtual function calls in constant expressionsInfo
20P1064
9
9
19.28
11.4
Consistency improvements for comparisons20P1120
10
8
10
19.22
12
char8_t: A type for UTF-8 characters and stringsInfo
20P0482
9
7
19.22
10
20P0595
9
9
19.25
11.4
constexpr try-catch blocks20P1002
9
8
19.25
10.2
Immediate functions (consteval)Info
20P1073
10
11
11
14
17
19.28
19.29
15
Nested inline namespaces20P1094
9
8
19.27
10.2
Yet another approach for constrained declarations20P1141
10
10
19.26
19.28
12.5
Signed integers are two's complement20P1236
9
9
Yes
11.4
dynamic_cast and polymorphic typeid in constant expressions20P1327
10
9
19.28
11.4
Changing the active member of a union inside constexprInfo
20P1330
9
9
19.10
10.3
CoroutinesInfo
20P0912
10
8
17
19.0
19.10
19.28
10.2
Parenthesized initialization of aggregatesInfo
20P0960
P1975
10
16
19.28
16
Array size deduction in new-expressions20P1009
11
9
19.27
11.4
ModulesInfo
20P1103
P1703
P1766
P1779
P1811
P1815
P1857
P1874
P1979
P2115
P2615
P2788
11*
15*
16*
17*
19.0
19.28
26*
Stronger Unicode requirements20P1041
P1139
10
Yes
19.0
Yes
<=> != ==20P1185
10
10
19.22
12
Explicitly defaulted functions with different exception specifications20P1286
10
9
19.28
11.4
Structured binding extensions20P1091
P1381
10
8
16
19.11
19.24
16
Permit conversions to arrays of unknown bound20P0388
10
14
19.27
14
constexpr container operationsInfo
20P0784
10
10
19.28
12
Deprecating some uses of volatile20P1152
10
10
19.27
12
constinitInfo
20P1143
10
10
19.29
12
Missing feature test macros20P1353
9
9
19.29
Yes
Deprecate comma operator in subscripts20P1161
10
9
19.25
11.4
[[nodiscard("should have a reason")]]20P1301
10
9
19.25
11.4
Permitting trivial default initialization in constexpr contexts20P1331
10
10
19.27
12
Unevaluated asm-declaration in constexpr functions20P1668
10
10
19.28
12
using enumInfo
20P1099
11
13
19.24
13.4.1
Synthesizing Three-way comparison for specified comparison category20P1186
11
10
19.24
12
[[nodiscard]] for constructors20P1771
10
9
19.24
11.4
Class template argument deduction for alias templatesInfo
20P1814
10
19
19.27
Class template argument deduction for aggregatesInfo
20P1816
P2082
10
11
17
19.27
Implicit move for more local objects and rvalue references20P1825
11
13
19.24
13.4.1
Allow defaulting comparisons by value20P1946
10
10
19.25
12
Remove std::weak_equality and std::strong_equality20P1959
10
10
19.25
12
Inconsistencies with constant template parametersInfo
20P1907
10
11
18
19.26
13.4.1
Pseudo-destructors end object lifetimes20P0593
11
11
Yes
12.5
20P0463
8
7
19.22
10
Extending std::make_shared() to support arraysInfoInfo
20P0674
12
15
19.27
14.3
Floating Point AtomicInfoInfo
20P0020
10
18
19.22
16
C++ Synchronized Buffered Ostream (std::basic_osyncstream)InfoInfo
20P0053
11
18
19.29
Add constexpr modifiers to functions in <algorithm> and <utility>InfoInfo
20P0202
10
8
12
19.26
10.2
13
constexpr for std::complexInfoInfo
20P0415
9
7
16
19.27
10
15
Make std::memory_order a scoped enumeration (enum class)Info
20P0439
9
9
19.25
11.4
String prefix and suffix checking: std::string and std::string_view starts_with() and ends_with()Info
20P0457
9
6
19.21
10
Library support for operator<=> (<compare>)InfoInfo
20P0768
10
7
12
17
19.20
19.28
13
Transformation trait std::remove_cvrefInfoInfo
20P0550
9
6
19.20
10
[[nodiscard]] in the libraryInfo
20P0600
9
7
16
19.13
19.22
10
15
Using std::move() in numeric algorithmsInfo
20P0616
9
12
19.23
13
Utility to convert a pointer to a raw pointer (std::to_address())InfoInfo
20P0653
8
6
19.22
Yes
20P0718
12
19.27
20P0122
10
7
19.26
10
Extending <chrono> to calendars and time zonesInfoInfo
20P0355
11
13
14
7
19
19.29
10
20P0754
9
7
19.22
10
Comparing unordered containersInfo
20P0809
Yes
Yes
16.0
Yes
ConstexprIterator requirementsInfoInfo
20P0858
9
12
19.11
13
20P0966
11
8
19.25
10.2
Atomic compare-and-exchange with padding bitsInfo
20P0528
13
19.28
20P0019
10
19
19.28
16.3
contains() member function of associative containers, e.g. std::map::contains()Info
20P0458
9
13
19.21
13.4.1
Guaranteed copy elision for piecewise constructionInfo
20P0475
9
Yes
19.29
Yes
20P0476
11
14
19.27
14.3
20P0556
P1956
9
10
9
12
19.28
11.4
13
Improving the return value of erase-like algorithmsInfoInfo
20P0646
9
10
19.21
12
20P0722
9
9
19.27
11.4
20P0758
9
9
19.23
11.4
Add std::shift_left() and std::shift_right() to <algorithm>InfoInfo
20P0769
10
12
19.21
13
constexpr for std::swap() and swap related functionsInfo
20P0879
10
13
19.26
13.4.1
20P0887
9
8
19.21
10.2
Concepts libraryInfoInfo
20P0898
10
13
19.23
13.4.1
constexpr comparison operators for std::arrayInfo
20P1023
10
8
19.27
10.2
20P0318
9
8
19.21
10.2
20P0356
9
13
19.25
13.4.1
std::reference_wrapper for incomplete typesInfo
20P0357
9
8
19.26
10.2
Fixing operator>>(basic_istream&, CharT*)Info
20P0487
11
8
19.23
10.2
Library support for char8_tInfoInfo
20P0482
9
8
16
19.22
10.2
15
Utility functions to implement uses-allocator constructionInfo
20P0591
9
16
19.29
15
std::variant and std::optional should propagate copy/move trivialityInfo
20P0602
8.3
8
19.11
10.2
A sane std::variant converting constructorInfo
20P0608
10
9
19.29
19.42
11.4
std::function's move constructor should be noexceptInfo
20P0771
7.2
6
19.22
Yes
The One Ranges ProposalInfoInfo
20P0896
10
13
15
19.29
14.3
Heterogeneous lookup for unordered associative containersInfoInfo
20P0919
P1690
11
12
19.23
19.25
13
<chrono> zero(), min() and max() should be noexceptInfo
20P0972
9
8
19.14
10.2
constexpr in std::pointer_traitsInfoInfo
20P1006
9
8
19.26
10.2
20P1007
9
11
15
19.28
14.3
Smart pointer creation with default initialization (e.g. std::make_unique_for_overwrite())InfoInfo
20P1020
P1973
11
12
16
19.28
15
Misc constexpr bitsInfoInfo
20P1032
10
13
19.28
13.4.1
Remove comparison operators of std::spanInfo
20P1085
10
8
19.26
10.2
Make stateful allocator propagation more consistent for operator+(basic_string)Info
20P1165
10
15
19.26
14.3
Consistent container erasure (std::erase() and std::erase_if())InfoInfo
20P1209
P1115
9
10
8
11
19.25
19.27
10.2
12.5
Standard library header unitsInfo
20P1502
11
19.29
pmr::polymorphic_allocator<> as a vocabulary typeInfoInfo
20P0339
9
16
19.28
15
Target Vectorization Policies from Parallelism V2 TS to C++20 (std::execution::unseq)InfoInfo
20P1001
9
17*
19.28
20P0811
9
9
19.23
19.28
11.4
Usability enhancements for std::spanInfo
20P1024
10
9
14
19.26
11.4
20P1164
8.3
12
19.20
13
std::ssize() and unsigned extent for std::spanInfoInfo
20P1227
10
9
19.25
11.4
Traits for (un)bounded arraysInfoInfo
20P1357
9
9
19.25
11.4
20P0325
10
10
19.25
12
Efficient access to std::basic_stringbuf's bufferInfo
20P0408
11
17
19.29
15
Layout-compatibility and pointer-interconvertibility traitsInfoInfo
20P0466
12
19.29
20P0553
9
9
19.25
19.28
11.4
Mathematical constantsInfoInfo
20P0631
10
11
19.25
12.5
Text formatting (std::format())InfoInfo
20P0645
13
14
17
19.29
15.3
20P0660
10
17
20
19.28*
16.4
26
constexpr std::allocator and related utilitiesInfoInfo
20P0784
10
12
19.29
13
constexpr std::stringInfoInfo
20P0426
P1032
P0980
12
15
19.29
19.30
14.3
constexpr std::vectorInfoInfo
20P1004
12
15
19.29
19.30
14.3
Input range adaptorsInfo
20P1035
10
16
19.29
15
constexpr std::invoke() and related utilitiesInfo
20P1065
10
12
19.28
13
Atomic waiting and notifying, std::counting_semaphore, std::latch and std::barrierInfoInfo
20P1135
11
11
19.28
13.4.1*
Add max() to latch and barrierInfo
20P1865
11
11
19.29
Yes
20P1208
11
16
19.29
15
The Mothership has Landed: Adding <=> to the LibraryInfo
20P1614
10
19
19.29
16.3
Integration of chrono with text formattingInfo
20P1361
13
21
19.29
26
constexpr default constructor of std::atomic and std::atomic_flagInfoInfo
20P0883
10
13
19.26
13.4.1
constexpr for numeric algorithmsInfoInfo
20P1645
10
12
19.26
13
Safe integral comparisonsInfoInfo
20P0586
10
13
19.27
13.4.1
Reviewing deprecated facilities of C++17 for C++20Info
20P0619
12
20*
19.26
26
Symmetry for spaceshipInfoInfo
20P0905
10
7
16.3
Add wait/notify to std::atomic_ref<T>Info
20P1643
19
16.3
std::basic_istream_view::iterator should not be copyableInfo
20P1638
16
15
Output chrono::days with 'd' suffixInfo
20P1650
13
16
19.29
15
Ranges adaptors for non-copyable iteratorsInfo
20P1862
16
15
ranges::elements_view needs its own sentinelInfo
20P1994
16
15
char8_t backward compatibility remediationInfoInfo
20P1423
10
15
19.26
14.3
Concept traits should be named after conceptsInfo
20P1871
14
19.27
Yes
New Rules for auto deduction from braced-init-list17N3922
5
3.8
19.0
Yes
Allow typename in a template template parameter17N4051
5
3.5
19.0
Yes
Removing trigraphs??!17N4086
5
3.5
16.0
Yes
Nested namespace definition17N4230
6
3.6
19.0
Yes
Extending static_assert, v2Info
17N3928
6
2.5
19.10
Yes
Attributes for namespaces and enumeratorsInfo
17N4266
4.9
6
3.6
19.0
Yes
Adding u8 character literalsInfo
17N4267
6
3.6
19.0
Yes
Allow constant evaluation for all non-type template arguments17N4268
6
3.6
19.12
Yes
Unary folds and empty parameter packs17P0036
6
3.9
19.12
Yes
Remove deprecated use of the register keyword17P0001
7
3.8
19.11
Yes
Remove deprecated operator++(bool)17P0002
7
3.8
19.11
Yes
Make exception specifications be part of the type systemInfo
17P0012
7
4
19.12
Yes
__has_include17P0061
5
Yes
19.11
Yes
Rewording inheriting constructorsInfo
17P00136
7
3.9
19.14*
Yes
Extension to aggregate initializationInfo
17P0017
7
3.9
19.14
Yes
Folding expressionsInfo
17N4295
6
3.6
19.12
Yes
Lambda capture of *this by value as [=,*this]17P0018
7
3.9
19.11
Yes
Construction rules for enum class values17P0138
7
3.9
19.11
Yes
Wording for constexpr lambdaInfo
17P0170
7
5
19.11
Yes
Generalizing the range-based for loopInfo
17P0184
6
3.9
19.10
Yes
Attribute [[fallthrough]]17P0188
7
3.9
19.10
Yes
Attribute [[nodiscard]]17P0189
7
3.9
19.11
Yes
Attribute [[maybe_unused]]17P0212
7
3.9
19.11
Yes
Hexadecimal floating literalsInfo
17P0245
3
Yes
19.11
Yes
Using attribute namespaces without repetition17P0028
7
3.9
19.11
Yes
Dynamic memory allocation for over-aligned dataInfo
17P0035
7
4
19.12
10
Declaring non-type template parameters with autoInfo
17P0127
7
4
19.14
Yes
Guaranteed copy elisionInfo
17P0135
7
4
19.13
Yes
Replacement of class objects containing reference members17P0137
7
6
19.14
Yes
Refining expression evaluation order for idiomatic C++17P0145
7
4
19.14
Yes
Proposed wording for structured bindingsInfo
17P0217
7
4
19.11
Yes
Standard and non-standard attributes (ignoring unknown attributes)17P0283
Yes
3.9
19.0
Yes
constexpr if statementsInfo
17P0292
7
3.9
19.11
Yes
Init-statements for if and switch17P0305
7
3.9
19.11
Yes
inline variablesInfo
17P0386
7
3.9
19.12
Yes
Removing deprecated exception specifications from C++1717P0003
7
4
19.12
Yes
Pack expansions in using-declarationsInfo
17P0195
7
4
19.14
Yes
Matching of template template-arguments excludes compatible templatesInfo
17P0522
7
4
19.12
Yes
Template argument deduction for class templates (CTAD)Info
17P0091
7
5
19.14
Yes
17N3911
6
3.6
19.0
Yes
17N4259
6
3.6
19.0
Yes
17N4280
6
3.6
19.0
Yes
Cleaning‐up noexcept in the libraryInfoInfo
17N4258
6
3.7
19.0
15
17N4169
6
3.7
19.0
Yes
try_emplace() and insert_or_assign() for std::map and std::unordered_mapInfoInfo
17N4279
6
3.7
19.0
Yes
Improving std::pair and std::tupleInfo
17N4387
6
4
19.0
Yes
17N4389
6
4
19.0
Yes
17N4508
6
3.7
19.0
Yes
Minimal incomplete type support for std::forward_list, std::list and std::vectorInfoInfo
17N4510
3
3.6
18.0
Yes
Adopt type traits variable templates from library fundamentals TS for C++17InfoInfo
17P0006
7
3.8
19.0
Yes
Logical operator type traitsInfoInfo
17P0013
6
3.8
19.0
Yes
Constant View: A proposal for a std::as_const() helper function templateInfo
17P0007
7
3.8
19.0
Yes
Rounding functions for chrono::duration and chrono::time_pointInfoInfo
17P0092
7
3.8
19.0
Yes
Making std::owner_less more flexible (std::owner_less<void>)InfoInfo
17P0074
7
3.8
19.0
Yes
17P0005
P0358
7
3.9
19.12
Yes
The parallelism TS should be standardized (parallel algorithms)InfoInfo
17P0024
9
17
19.14
17P0025
7
3.9
19.0
10
(nothrow-)swappable traitsInfoInfo
17P0185
7
3.9
19.0
10
Polymorphic memory resourcesInfoInfo
17P0220
9
16
19.13
15
17P0220
7
16
19.13
Yes
17P0226
7
19.14
17LWG2296
7
Yes
19.0
15*
constexpr for std::reverse_iterator, std::move_iterator, std::array and range accessInfoInfo
17P0031
7
4
19.11
Yes
constexpr std::atomic<T>::is_always_lock_free()InfoInfo
17P0152
7
3.9
19.11
Yes
std::enable_shared_from_this::weak_from_this()InfoInfo
17P0033
7
3.9
19.12
Yes
3-argument overload of std::hypot()InfoInfo
17P0030
7
3.9
19.14
Yes
17P0298
7
5
19.11
Yes
17N3921
P0220
P0254
P0403
7
4
19.10
10
17P0220
P0032
7
4
19.11
10
17P0220
7
4
19.10
10
C++17 should refer to C11 instead of C99Info
17P0063
9
7
19.0
19.28
10
Splicing maps and sets (std::map::extract(), std::map::merge() etc)InfoInfo
17P0083
7
8
19.12
10
emplace() return type in containers (instead of void)Info
17P0084
7
4
19.11
Yes
17P0088
7
4
19.10
10
17P0209
7
4
19.10
Yes
17P0258
7
6
19.11
Yes
17P0295
7
4
19.11
Yes
Replacement of class objects containing reference members (std::launder())InfoInfo
17P0137
7
6
19.14
Yes
17P0040
7
4
19.11
17P0163
7
3.9
19.10
Yes
Elementary string conversions (std::to_chars() and std::from_chars())InfoInfo
17P0067
8
11
7
14
20
19.14
19.15
19.16
19.23
10
std::shared_ptr and std::weak_ptr with array supportInfo
17P0414
7
11
19.12
12
constexpr for all member functions of chrono::duration and chrono::time_pointInfoInfo
17P0505
7
4
19.11
Yes
std::shared_ptr<T[]>InfoInfo
17P0497
5
11
19.12
15*
17P0426
8
4
19.14
Yes
File system library (std::filesystem)InfoInfo
17P0218
P0219
8
7
19.14
11
Hardware interference size (reading cache line size)InfoInfo
17P0154
12
15
19
19.11
16.3*
17P0156
7
5
19.11
Yes
17LWG2911
7
5
19.15
Yes
17P0604
7
Yes
19.11
Yes
std::hash<filesystem::path>Info
17LWG3657
11.4
17
19.32
15