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)
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>) | 26 | P2996 | ||||
Annotations for Reflection | 26 | P3394 | ||||
Splicing a base class subobject | 26 | P3293 | ||||
define_static_{string,object,array} | 26 | P3491 | ||||
Function Parameter Reflection in Reflection for C++26 | 26 | P3096 | ||||
Expansion Statements ( template for) | 26 | P1306 | ||||
Error Handling in Reflection | 26 | P3560 | ||||
constexpr virtual inheritance | 26 | P3533 | ||||
Contracts for C++ ( <contracts>) | 26 | P2900 | ||||
Standard library hardening | 26 | P3471 | ||||
Minor additions to C++26 standard library hardening | 26 | P3697 | ||||
Trivial Relocatability For C++26 | 26 | P2786 | ||||
| 26 | P2662 | |||||
constexpr cast from void*: towards constexpr type-erasure | 26 | P2738 | ||||
| Static storage for braced initializers | 26 | P2752 | ||||
User-generated static_assert messages | 26 | P2741 | ||||
A nice placeholder with no name (using _ as a variable name) | 26 | P2169 | ||||
#embed - a scannable, tooling-friendly binary resource inclusion mechanism | 26 | P1967 | ||||
| On the ignorability of standard attributes | 26 | P2552 | ||||
| Remove deprecated arithmetic conversion on enumerations | 26 | P2864 | ||||
| UB? In My Lexer? (Remove undefined behavior from lexing) | 26 | P2621 | ||||
| Template parameter initialization | 26 | P2308 | ||||
| Disallow binding a returned glvalue to a temporary | 26 | P2748 | ||||
Attributes for structured bindings | 26 | P0609 | ||||
| Making non-encodable string literals ill-formed | 26 | P1854 | ||||
| Unevaluated strings | 26 | P2361 | ||||
| Add @, $, and ` to the basic character set | 26 | P2558 | ||||
Erroneous behavior for uninitialized reads (and [[indeterminate]] attribute) | 26 | P2795 | ||||
= delete("should have a reason"); | 26 | P2573 | ||||
| Clarifying rules for brace elision in aggregate initialization | 26 | P3106 | ||||
| Module declarations shouldn't be macros | 26 | P3034 | ||||
| 26 | P3037 | |||||
Trivial infinite loops are not undefined behavior | 26 | P2809 | ||||
constexpr placement new | 26 | P2747 | ||||
Structured binding declaration as a condition | 26 | P0963 | ||||
std::optional<T&> | 26 | P2988 | ||||
| 26 | P2546 P2810 | |||||
Variadic friends | 26 | P2893 | ||||
| 26 | P3383 | |||||
| 26 | P2389 | |||||
| 26 | P2642 | |||||
Better mdspan's CTAD | 26 | P3029 | ||||
Inspecting std::exception_ptr | 26 | P2927 | ||||
Inspecting std::exception_ptr should be constexpr | 26 | P3748 | ||||
Standardized constexpr type ordering | 26 | P2830 | ||||
execution::write_env and unstoppable sender adaptors | 26 | P3284 | ||||
Parallel range algorithms | 26 | P3179 | ||||
Reconsider parallel ranges::rotate_copy() and ranges::reverse_copy() | 26 | P3709 | ||||
Rename std::observable() to std::observable_checkpoint(), and add a feature-test macro | 26 | P3641 | ||||
std::string::subview() | 26 | P3044 | ||||
Interleaved complex values support in std::simd | 26 | P2663 | ||||
Extend <bit> header function with overloads for std::simd | 26 | P2933 | ||||
Proposal to extend std::simd with more constructors and accessors | 26 | P2876 | ||||
std::simd is a range | 26 | P3480 | ||||
Extend std::simd with permutation API | 26 | P2664 | ||||
Reconsider naming of the namespace for std::simd | 26 | P3691 | ||||
| 26 | P3570 | |||||
std::execution::bulk() issues | 26 | P3481 | ||||
Allocator support for operation states | 26 | P3433 | ||||
async_scope - Creating scopes for non-sequential concurrency | 26 | P3149 | ||||
Remove std::execution::split() | 26 | P3682 | ||||
Parallel scheduler | 26 | P2079 | ||||
Make type-erased allocator use in std::promise and std::packaged_task consistent | 26 | P3503 | ||||
Atomic floating-point min/max | 26 | P3008 | ||||
Atomic reduction operations | 26 | P3111 | ||||
Add std::views::indices(n) | 26 | P3060 | ||||
Prevent path presentation problems | 26 | P2319 | ||||
Making std::istream::ignore less surprising | 26 | P3223 | ||||
std::constant_wrapper | 26 | P2781 | ||||
High-quality sender diagnostics with constexpr exceptions | 26 | P3557 | ||||
| Preprocessing is never undefined | 26 | P2843 | ||||
Add a coroutine task type | 26 | P3552 | ||||
| 26 | P1317 | |||||
Ordering of constraints involving fold expressions | 26 | P2963 | ||||
| Deleting a pointer to an incomplete type should be ill-formed | 26 | P3144 | ||||
Structured bindings can introduce a pack | 26 | P1061 | ||||
constexpr structured bindings and references to constexpr variables | 26 | P2686 | ||||
Allowing exception throwing in constant-evaluation ( constexpr exceptions) | 26 | P3068 | ||||
| The Oxford variadic comma | 26 | P3176 | ||||
| Remove deprecated array comparisons from C++26 | 26 | P2865 | ||||
C++26 should refer to C23 not C17 | 26 | P3348 | ||||
Concept and variable-template template-parameters | 26 | P2841 | ||||
Trivial unions (was std::uninitialized<T>) | 26 | P3074 | ||||
Partial program correctness (std::observable()) | 26 | P1494 | ||||
| 26 | P2497 | |||||
| 26 | P1885 P2862 | |||||
to_string or not to_string (Arithmetic overloads of std::to_string() and std::to_wstring() use std::format()) | 26 | P2587 | ||||
Type checking format args | 26 | P2757 | ||||
Formatting pointers | 26 | P2510 | ||||
Hashing support for chrono value classes | 26 | P2592 | ||||
| 26 | P2545 | |||||
| 26 | P2530 | |||||
ADL-proof std::projected | 26 | P2538 | ||||
constexpr stable sorting | 26 | P2562 | ||||
| 26 | P2637 | |||||
| 26 | P2641 | |||||
Extending associative containers with the remaining heterogeneous overloads | 26 | P2363 | ||||
| 26 | P1901 | |||||
Native handles and file streams | 26 | P1759 | ||||
| 26 | P2495 | |||||
| 26 | P2697 | |||||
| 26 | P1383 | |||||
| 26 | P2734 | |||||
| 26 | P0792 | |||||
| 26 | P2548 | |||||
| 26 | P2714 | |||||
std::submdspan() | 26 | P2630 P3355 | ||||
Freestanding language: Optional ::operator new | 26 | P2013 | ||||
Freestanding std::char_traits, std::errc and facilities in: <charconv>, <cstdlib>, <cstring>, <cwchar> | 26 | P2338 | ||||
Freestanding Feature-Test Macros and Implementation-Defined Extensions | 26 | P2198 | ||||
Saturation arithmetic | 26 | P0543 | ||||
| 26 | P1673 P3050 P3222 | |||||
Make assert() macro user friendly for C and C++ | 26 | P2264 | ||||
| 26 | P2905 | |||||
| 26 | P2918 | |||||
| 26 | P2447 | |||||
| 26 | P2821 | |||||
Add tuple protocol to complex | 26 | P2819 | ||||
A new specification for std::generate_canonical() | 26 | P0952 | ||||
Remove deprecated std::allocator typedef from C++26 (std::allocator::is_always_equal()) | 26 | P2868 | ||||
Remove std::basic_string::reserve() from C++26 | 26 | P2870 | ||||
Remove deprecated Unicode conversion facets from C++26 ( <codecvt>) | 26 | P2871 | ||||
| 26 | P2937 | |||||
Freestanding library: Partial Classes | 26 | P2407 | ||||
| 26 | P2833 | |||||
| 26 | P2836 P2950 | |||||
std::make_format_args() now accepts only lvalue references instead of forwarding references | 26 | P2905 | ||||
Fix formatting of code units as integers (Dude, where's my char?) | 26 | P2909 | ||||
| 26 | P2542 | |||||
| 26 | P2591 | |||||
Enabling list-initialization for algorithms | 26 | P2248 P3217 | ||||
| 26 | P1068 | |||||
Comparisons for std::reference_wrapper (and constraints for comparisons of std::pair, std::tuple, std::optional, and std::variant) | 26 | P2944 | ||||
Atomic minimum/maximum | 26 | P0493 | ||||
| 26 | P2845 | |||||
| 26 | P3142 | |||||
Undeprecate std::polymorphic_allocator::destroy() for C++26 | 26 | P2875 | ||||
Remove deprecated strstreams from C++26 | 26 | P2867 | ||||
Remove deprecated std::shared_ptr atomic access APIs from C++26 | 26 | P2869 | ||||
Remove std::wstring_convert from C++26 | 26 | P2872 | ||||
| 26 | P3107 P3235 | |||||
Remove nodiscard annotations from the standard library specification | 26 | P2422 | ||||
| 26 | P2300 P3396 | |||||
| 26 | P0843 | |||||
| 26 | P2075 | |||||
| 26 | P3168 | |||||
| 26 | P2985 | |||||
Make std::ignore a first-class object | 26 | P2968 | ||||
Removing the common reference requirement from the indirectly invocable concepts | 26 | P2997 | ||||
Deprecate the notion of trivial types ( std::is_trivial and std::is_trivial_v) | 26 | P3247 | ||||
Retiring niebloids | 26 | P3136 | ||||
| 26 | P3138 | |||||
| 26 | P3379 | |||||
std::aligned_accessor: An std::mdspan accessor expressing pointer over-alignment (and std::is_sufficiently_aligned()) | 26 | P2897 | ||||
| 26 | P2835 | |||||
cv-qualified types in std::atomic and std::atomic_ref | 26 | P3323 | ||||
| 26 | P3309 | |||||
Wording for "constexpr for specialized memory algorithms" | 26 | P3508 | ||||
| 26 | P3369 | |||||
Add new library headers from C23 ( <stdbit.h> and <stdckdint.h>) | 26 | P3370 | ||||
std::simd (<simd>) | 26 | P1928 | ||||
Rename simd_split() to simd_chunk() | 26 | P3441 | ||||
Utility for creating execution environments | 26 | P3325 | ||||
constexpr exception types | 26 | P3378 | ||||
Defang and deprecate std::memory_order::consume | 26 | P3475 | ||||
Put std::monostate in <utility> | 26 | P0472 | ||||
| 26 | P3019 | |||||
constexpr containers and adaptors | 26 | P3372 | ||||
| 26 | P3074 | |||||
| 26 | P3137 | |||||
ranges::approximately_sized_range and ranges::reserve_hint() | 26 | P2846 | ||||
| 26 | P0447 | |||||
| 26 | P2976 | |||||
Converting contiguous iterators to pointers | 26 | P3349 | ||||
Allow attaching main to the global module | 26 | P3618 | ||||
Literal suffix for (signed) size_t (uz/t) | 23 | P0330 | ||||
Down with ()! (relax () rules for lambdas) | 23 | P1102 | ||||
if consteval | 23 | P1938 | ||||
| Removing garbage collection support | 23 | P2186 | ||||
Narrowing contextual conversions to bool (in static_assert and constexpr if) | 23 | P1401 | ||||
| Trimming whitespaces before line splicing | 23 | P2223 | ||||
| Make declaration order layout mandated | 23 | P1847 | ||||
| Remove mixed wide string literal concatenation | 23 | P2201 | ||||
Explicit object member functions (deducing this) | 23 | P0847 | ||||
| Proposed resolution for CWG2692 static and explicit object member functions with the same parameter-type-lists | 23 | P2797 | ||||
Decay-copy in the language ( auto(x) and auto{x}) | 23 | P0849 | ||||
Add support for preprocessing directives #elifdef and #elifndef | 23 | P2334 | ||||
Non-literal variables (and labels and gotos) in constexpr functions | 23 | P2242 | ||||
| Consistent character literal encoding | 23 | P2316 | ||||
| Character sets and encodings | 23 | P2314 | ||||
Extend init-statement (of for loop) to allow alias-declaration | 23 | P2360 | ||||
Multidimensional subscript operator ( operator[x, y]) | 23 | P2128 | ||||
| Attributes on lambdas | 23 | P2173 | ||||
#warning | 23 | P2437 | ||||
| Remove non-encodable wide character literals and multicharacter wide character literals | 23 | P2362 | ||||
| Labels at the end of compound statements | 23 | P2324 | ||||
| Delimited escape sequences | 23 | P2290 | ||||
Named universal character escapes | 23 | P2071 | ||||
Relaxing some constexpr restrictions | 23 | P2448 | ||||
Simpler implicit move | 23 | P2266 | ||||
static operator() (static call operator) | 23 | P1169 | ||||
| Requirements for optional extended floating-point types | 23 | P1467 | ||||
| Class template argument deduction from inherited constructors | 23 | P2582 | ||||
Attribute [[assume]] | 23 | P1774 | ||||
Support for UTF-8 as a portable source file encoding | 23 | P2295 | ||||
static operator[] | 23 | P2589 | ||||
Permitting static constexpr variables in constexpr functions | 23 | P2647 | ||||
Extending the lifetime of temporaries in range-based for loop initializer | 23 | P2644 P2718 | ||||
| Declarations and where to find them | 23 | P1787 | ||||
| Change scope of lambda trailing-return-type | 23 | P2036 P2579 | ||||
| Meaningful exports | 23 | P2615 | ||||
consteval needs to propagate up | 23 | P2564 | ||||
| C++ identifier syntax using Unicode Standard Annex 31 | 23 | P1949 | ||||
| Allow duplicate attributes | 23 | P2156 | ||||
Adjusting the value of feature-test macro __cpp_concepts | 23 | P2493 | ||||
Relax requirements on wchar_t to match existing practices | 23 | P2460 | ||||
| Using unknown pointers and references in constant expressions | 23 | P2280 | ||||
| The equality operator you are looking for | 23 | P2468 | ||||
char8_t compatibility and portability fix | 23 | P2513 | ||||
| 23 | P0881 | |||||
| 23 | P2301 | |||||
| 23 | P0943 | |||||
| 23 | P1048 | |||||
| 23 | P1679 | |||||
| 23 | P1682 | |||||
Relaxing requirements for chrono::time_point::clock | 23 | P2212 | ||||
Providing size feedback in the Allocator interface | 23 | P0401 | ||||
| 23 | P0448 | |||||
| 23 | P1132 | |||||
constexpr std::type_info::operator==() | 23 | P1328 | ||||
| 23 | P1425 | |||||
Non-deduction context for allocators in container deduction guides | 23 | P1518 | ||||
| 23 | P1659 | |||||
Prohibiting std::basic_string and std::basic_string_view construction from nullptr | 23 | P2166 | ||||
| 23 | P2136 | |||||
Range constructor for std::basic_string_view | 23 | P1989 | ||||
Default template arguments for std::pair's forwarding constructor | 23 | P1951 | ||||
Remove garbage collection and reachability-based leak detection (library support) | 23 | P2186 | ||||
| 23 | P2321 | |||||
Heterogeneous erasure overloads for associative containers | 23 | P2077 | ||||
| 23 | P1272 | |||||
Printing volatile T* | 23 | P1147 | ||||
| 23 | P1072 | |||||
| 23 | P0798 | |||||
| 23 | P0288 | |||||
Add a conditional noexcept specification to std::exchange() | 23 | P2401 | ||||
Require std::span and std::basic_string_view to be TriviallyCopyable | 23 | P2251 | ||||
Clarifying the status of the "C headers" | 23 | P2340 | ||||
| 23 | P0323 P2549 | |||||
| 23 | P0533 | |||||
| 23 | P0627 | |||||
Deprecating std::aligned_storage and std::aligned_union | 23 | P1413 | ||||
A type trait to detect reference binding to temporary | 23 | P2255 | ||||
| 23 | P2273 | |||||
Constructing containers and strings from ranges with ranges::to(), tagged constructors, insert and assign member functions | 23 | P1206 | ||||
| 23 | P2387 | |||||
| 23 | P2440 | |||||
| 23 | P2441 | |||||
| 23 | P2442 | |||||
| 23 | P2443 | |||||
| 23 | P0009 P2599 P2604 P2613 P2763 | |||||
Referencing the Unicode Standard | 23 | P2736 | ||||
De-deprecating volatile compound operations. | 23 | P2327 | ||||
| 23 | P0429 | |||||
| 23 | P1222 | |||||
| 23 | P1223 | |||||
Freestanding library: Easy <utility>, <ranges> and <iterator> | 23 | P1642 | ||||
| 23 | P1899 | |||||
| 23 | P2165 | |||||
| 23 | P2278 | |||||
Formatting ranges | 23 | P2286 | ||||
Improve default container formatting | 23 | P2585 | ||||
| 23 | P2093 P2539 | |||||
| 23 | P2693 | |||||
| 23 | P2291 | |||||
| 23 | P2302 | |||||
Ranges fold algorithms | 23 | P2322 | ||||
| 23 | P2374 P2540 | |||||
Adding move-only types support for comparison concepts ( std::equality_comparable, std::totally_ordered, std::three_way_comparable) | 23 | P2404 | ||||
Ranges iterators as inputs to non-ranges algorithms | 23 | P2408 | ||||
| 23 | P2417 | |||||
std::basic_string::substr() && | 23 | P2438 | ||||
| 23 | P2446 | |||||
Standard library modules ( import std) | 23 | P2465 | ||||
| 23 | P2445 | |||||
| 23 | P2467 | |||||
| 23 | P2474 | |||||
Relaxing range adaptors to allow for move-only types | 23 | P2494 | ||||
std::basic_string_view range constructor should be explicit | 23 | P2499 | ||||
| 23 | P2502 P2787 | |||||
Add a conditional noexcept specification to std::apply() | 23 | P2517 | ||||
| 23 | P2590 P2679 | |||||
Clarify handling of encodings in localized formatting of chrono types | 23 | P2419 | ||||
std::move_iterator<T*> should be a random access iterator | 23 | P2520 | ||||
Deduction guides update for static operator() | 23 | P1169 | ||||
Standard names and library support for extended floating-point types | 23 | P1467 | ||||
| 23 | P2505 | |||||
| 23 | P2164 | |||||
| 23 | P2674 | |||||
| 23 | P2655 | |||||
Disallowing user specialization of std::allocator_traits | 23 | P2652 | ||||
Deprecating std::numeric_limits::has_denorm | 23 | P2614 | ||||
Making multi-param constructors of views explicit | 23 | P2711 | ||||
Relaxing Ranges Just A Smidge | 23 | P2609 | ||||
Stashing stashing iterators for proper flattening | 23 | P2770 | ||||
| 23 | P2162 | |||||
Conditionally borrowed ranges | 23 | P2017 | ||||
Repairing input range adaptors and std::counted_iterator | 23 | P2259 | ||||
views::join() should join all views of ranges | 23 | P2328 | ||||
Views should not be required to be default-constructible | 23 | P2325 | ||||
Range adaptor objects bind arguments by value | 23 | P2281 | ||||
| 23 | P2231 | |||||
Superior string splitting ( views::lazy_split() and redesigned views::split()) | 23 | P2210 | ||||
| 23 | P2432 | |||||
What is a view? | 23 | P2415 | ||||
Fixing locale handling in chrono formatters | 23 | P2372 | ||||
Cleaning up integer-class types | 23 | P2393 | ||||
std::format() improvements | 23 | P2216 | ||||
Add support for std::generator-like types to std::format() | 23 | P2418 | ||||
| 23 | P2508 | |||||
Poison Pills are Too Toxic | 23 | P2602 | ||||
std::format() fill character allowances | 23 | P2572 | ||||
Improving std::format()'s width estimation | 23 | P2675 | ||||
| 23 | P2588 | |||||
Allow Lambda capture [=, this] | 20 | P0409 | ||||
__VA_OPT__ | 20 | P0306 P1042 | ||||
Designated initializers | 20 | P0329 | ||||
Familiar template syntax for generic lambdas (template-able lambdas) | 20 | P0428 | ||||
| Default member initializers for bit-fields | 20 | P0683 | ||||
| Initializer list constructors in class template argument deduction | 20 | P0702 | ||||
const&-qualified pointers to members | 20 | P0704 | ||||
Concepts | 20 | P0734 | ||||
| Wording for lambdas in unevaluated contexts | 20 | P0315 | ||||
Three-way comparison operator ( operator<=>) | 20 | P0515 | ||||
| Simplifying implicit lambda capture | 20 | P0588 | ||||
| init-statements for range-based for | 20 | P0614 | ||||
| Default constructible and assignable stateless lambdas | 20 | P0624 | ||||
| const mismatch with defaulted copy constructor | 20 | P0641 | ||||
| Access checking on specializations | 20 | P0692 | ||||
| ADL and function templates that are not visible | 20 | P0846 | ||||
Specify when constexpr function definitions are needed for constant evaluation | 20 | P0859 | ||||
| Fixing functionality gaps in constraints | 20 | P0857 | ||||
Attributes [[likely]] and [[unlikely]] | 20 | P0479 | ||||
Down with typename! | 20 | P0634 | ||||
Pack-expansions in lambda init-captures | 20 | P0780 | ||||
Language support for empty objects ([[no_unique_address]] attribute) | 20 | P0840 | ||||
Conditionally trivial special member functions | 20 | P0848 | ||||
| Relaxing the structured bindings customization point finding rules | 20 | P0961 | ||||
Relaxing the range-for loop customization point finding rules | 20 | P0962 | ||||
| Allow structured bindings to accessible members | 20 | P0969 | ||||
Destroying operator delete | 20 | P0722 | ||||
| Class types in non-type template parameters | 20 | P0732 | ||||
Deprecate implicit capture of this via [=] | 20 | P0806 | ||||
explicit(bool) | 20 | P0892 | ||||
| Integrating feature-test macros | 20 | P0941 | ||||
| Prohibit aggregates with user-declared constructors | 20 | P1008 | ||||
Allowing virtual function calls in constant expressions | 20 | P1064 | ||||
| Consistency improvements for comparisons | 20 | P1120 | ||||
char8_t: A type for UTF-8 characters and strings | 20 | P0482 | ||||
| 20 | P0595 | |||||
constexpr try-catch blocks | 20 | P1002 | ||||
Immediate functions ( consteval) | 20 | P1073 | ||||
| Nested inline namespaces | 20 | P1094 | ||||
| Yet another approach for constrained declarations | 20 | P1141 | ||||
| Signed integers are two's complement | 20 | P1236 | ||||
dynamic_cast and polymorphic typeid in constant expressions | 20 | P1327 | ||||
Changing the active member of a union inside constexpr | 20 | P1330 | ||||
Coroutines | 20 | P0912 | ||||
Parenthesized initialization of aggregates | 20 | P0960 P1975 | ||||
Array size deduction in new-expressions | 20 | P1009 | ||||
Modules | 20 | P1103 P1703 P1766 P1779 P1811 P1815 P1857 P1874 P1979 P2115 P2615 P2788 | ||||
| Stronger Unicode requirements | 20 | P1041 P1139 | ||||
<=> != == | 20 | P1185 | ||||
| Explicitly defaulted functions with different exception specifications | 20 | P1286 | ||||
| Structured binding extensions | 20 | P1091 P1381 | ||||
| Permit conversions to arrays of unknown bound | 20 | P0388 | ||||
constexpr container operations | 20 | P0784 | ||||
Deprecating some uses of volatile | 20 | P1152 | ||||
constinit | 20 | P1143 | ||||
| Missing feature test macros | 20 | P1353 | ||||
| Deprecate comma operator in subscripts | 20 | P1161 | ||||
[[nodiscard("should have a reason")]] | 20 | P1301 | ||||
Permitting trivial default initialization in constexpr contexts | 20 | P1331 | ||||
Unevaluated asm-declaration in constexpr functions | 20 | P1668 | ||||
using enum | 20 | P1099 | ||||
| Synthesizing Three-way comparison for specified comparison category | 20 | P1186 | ||||
[[nodiscard]] for constructors | 20 | P1771 | ||||
Class template argument deduction for alias templates | 20 | P1814 | ||||
Class template argument deduction for aggregates | 20 | P1816 P2082 | ||||
| Implicit move for more local objects and rvalue references | 20 | P1825 | ||||
| Allow defaulting comparisons by value | 20 | P1946 | ||||
Remove std::weak_equality and std::strong_equality | 20 | P1959 | ||||
Inconsistencies with constant template parameters | 20 | P1907 | ||||
| Pseudo-destructors end object lifetimes | 20 | P0593 | ||||
| 20 | P0463 | |||||
| 20 | P0674 | |||||
Floating Point Atomic | 20 | P0020 | ||||
| 20 | P0053 | |||||
| 20 | P0202 | |||||
| 20 | P0415 | |||||
Make std::memory_order a scoped enumeration (enum class) | 20 | P0439 | ||||
String prefix and suffix checking: std::string and std::string_view starts_with() and ends_with() | 20 | P0457 | ||||
Library support for operator<=> (<compare>) | 20 | P0768 | ||||
| 20 | P0550 | |||||
[[nodiscard]] in the library | 20 | P0600 | ||||
Using std::move() in numeric algorithms | 20 | P0616 | ||||
| 20 | P0653 | |||||
| 20 | P0718 | |||||
| 20 | P0122 | |||||
| 20 | P0355 | |||||
| 20 | P0754 | |||||
Comparing unordered containers | 20 | P0809 | ||||
| 20 | P0858 | |||||
std::basic_string::reserve() should not shrink | 20 | P0966 | ||||
Atomic compare-and-exchange with padding bits | 20 | P0528 | ||||
| 20 | P0019 | |||||
contains() member function of associative containers, e.g. std::map::contains() | 20 | P0458 | ||||
Guaranteed copy elision for piecewise construction | 20 | P0475 | ||||
| 20 | P0476 | |||||
Integral power-of-2 operations: std::bit_ceil(), std::bit_floor(), std::bit_width(), std::has_single_bit() | 20 | P0556 P1956 | ||||
Improving the return value of erase-like algorithms | 20 | P0646 | ||||
| 20 | P0722 | |||||
| 20 | P0758 | |||||
| 20 | P0769 | |||||
constexpr for std::swap() and swap related functions | 20 | P0879 | ||||
| 20 | P0887 | |||||
Concepts library | 20 | P0898 | ||||
constexpr comparison operators for std::array | 20 | P1023 | ||||
| 20 | P0318 | |||||
| 20 | P0356 | |||||
std::reference_wrapper for incomplete types | 20 | P0357 | ||||
Fixing operator>>(basic_istream&, CharT*) | 20 | P0487 | ||||
Library support for char8_t | 20 | P0482 | ||||
Utility functions to implement uses-allocator construction | 20 | P0591 | ||||
std::variant and std::optional should propagate copy/move triviality | 20 | P0602 | ||||
A sane std::variant converting constructor | 20 | P0608 | ||||
std::function's move constructor should be noexcept | 20 | P0771 | ||||
The One Ranges Proposal | 20 | P0896 | ||||
Heterogeneous lookup for unordered associative containers | 20 | P0919 P1690 | ||||
<chrono> zero(), min() and max() should be noexcept | 20 | P0972 | ||||
| 20 | P1006 | |||||
| 20 | P1007 | |||||
| 20 | P1020 P1973 | |||||
Misc constexpr bits | 20 | P1032 | ||||
Remove comparison operators of std::span | 20 | P1085 | ||||
Make stateful allocator propagation more consistent for operator+(basic_string) | 20 | P1165 | ||||
Consistent container erasure ( std::erase() and std::erase_if()) | 20 | P1209 P1115 | ||||
Standard library header units | 20 | P1502 | ||||
pmr::polymorphic_allocator<> as a vocabulary type | 20 | P0339 | ||||
Target Vectorization Policies from Parallelism V2 TS to C++20 ( std::execution::unseq) | 20 | P1001 | ||||
| 20 | P0811 | |||||
Usability enhancements for std::span | 20 | P1024 | ||||
Make filesystem::create_directory() intuitive | 20 | P1164 | ||||
| 20 | P1227 | |||||
Traits for (un)bounded arrays | 20 | P1357 | ||||
| 20 | P0325 | |||||
Efficient access to std::basic_stringbuf's buffer | 20 | P0408 | ||||
Layout-compatibility and pointer-interconvertibility traits | 20 | P0466 | ||||
Bit operations: std::rotl(), rotr(), countl_zero(), countl_one(), countr_zero(), countr_one(), popcount() | 20 | P0553 | ||||
Mathematical constants | 20 | P0631 | ||||
| 20 | P0645 | |||||
| 20 | P0660 | |||||
| 20 | P0784 | |||||
| 20 | P0426 P1032 P0980 | |||||
| 20 | P1004 | |||||
Input range adaptors | 20 | P1035 | ||||
constexpr std::invoke() and related utilities | 20 | P1065 | ||||
| 20 | P1135 | |||||
Add max() to latch and barrier | 20 | P1865 | ||||
| 20 | P1208 | |||||
The Mothership has Landed: Adding <=> to the Library | 20 | P1614 | ||||
Integration of chrono with text formatting | 20 | P1361 | ||||
| 20 | P0883 | |||||
constexpr for numeric algorithms | 20 | P1645 | ||||
Safe integral comparisons | 20 | P0586 | ||||
Reviewing deprecated facilities of C++17 for C++20 | 20 | P0619 | ||||
Symmetry for spaceship | 20 | P0905 | ||||
Add wait/notify to std::atomic_ref<T> | 20 | P1643 | ||||
std::basic_istream_view::iterator should not be copyable | 20 | P1638 | ||||
Output chrono::days with 'd' suffix | 20 | P1650 | ||||
Ranges adaptors for non-copyable iterators | 20 | P1862 | ||||
ranges::elements_view needs its own sentinel | 20 | P1994 | ||||
char8_t backward compatibility remediation | 20 | P1423 | ||||
Concept traits should be named after concepts | 20 | P1871 | ||||
| New Rules for auto deduction from braced-init-list | 17 | N3922 | ||||
Allow typename in a template template parameter | 17 | N4051 | ||||
| Removing trigraphs??! | 17 | N4086 | ||||
Nested namespace definition | 17 | N4230 | ||||
Extending static_assert, v2 | 17 | N3928 | ||||
Attributes for namespaces and enumerators | 17 | N4266 | ||||
Adding u8 character literals | 17 | N4267 | ||||
| Allow constant evaluation for all non-type template arguments | 17 | N4268 | ||||
| Unary folds and empty parameter packs | 17 | P0036 | ||||
Remove deprecated use of the register keyword | 17 | P0001 | ||||
Remove deprecated operator++(bool) | 17 | P0002 | ||||
Make exception specifications be part of the type system | 17 | P0012 | ||||
__has_include | 17 | P0061 | ||||
Rewording inheriting constructors | 17 | P00136 | ||||
Extension to aggregate initialization | 17 | P0017 | ||||
Folding expressions | 17 | N4295 | ||||
Lambda capture of *this by value as [=,*this] | 17 | P0018 | ||||
Construction rules for enum class values | 17 | P0138 | ||||
Wording for constexpr lambda | 17 | P0170 | ||||
Generalizing the range-based for loop | 17 | P0184 | ||||
Attribute [[fallthrough]] | 17 | P0188 | ||||
Attribute [[nodiscard]] | 17 | P0189 | ||||
Attribute [[maybe_unused]] | 17 | P0212 | ||||
Hexadecimal floating literals | 17 | P0245 | ||||
| Using attribute namespaces without repetition | 17 | P0028 | ||||
Dynamic memory allocation for over-aligned data | 17 | P0035 | ||||
Declaring non-type template parameters with auto | 17 | P0127 | ||||
Guaranteed copy elision | 17 | P0135 | ||||
| Replacement of class objects containing reference members | 17 | P0137 | ||||
| Refining expression evaluation order for idiomatic C++ | 17 | P0145 | ||||
Proposed wording for structured bindings | 17 | P0217 | ||||
| Standard and non-standard attributes (ignoring unknown attributes) | 17 | P0283 | ||||
constexpr if statements | 17 | P0292 | ||||
Init-statements for if and switch | 17 | P0305 | ||||
inline variables | 17 | P0386 | ||||
| Removing deprecated exception specifications from C++17 | 17 | P0003 | ||||
Pack expansions in using-declarations | 17 | P0195 | ||||
Matching of template template-arguments excludes compatible templates | 17 | P0522 | ||||
Template argument deduction for class templates (CTAD) | 17 | P0091 | ||||
| 17 | N3911 | |||||
| 17 | N4259 | |||||
| 17 | N4280 | |||||
Cleaningâup noexcept in the library | 17 | N4258 | ||||
| 17 | N4169 | |||||
| 17 | N4279 | |||||
Improving std::pair and std::tuple | 17 | N4387 | ||||
| 17 | N4389 | |||||
| 17 | N4508 | |||||
| 17 | N4510 | |||||
Adopt type traits variable templates from library fundamentals TS for C++17 | 17 | P0006 | ||||
Logical operator type traits | 17 | P0013 | ||||
Constant View: A proposal for a std::as_const() helper function template | 17 | P0007 | ||||
| 17 | P0092 | |||||
| 17 | P0074 | |||||
| 17 | P0005 P0358 | |||||
The parallelism TS should be standardized (parallel algorithms) | 17 | P0024 | ||||
| 17 | P0025 | |||||
( nothrow-)swappable traits | 17 | P0185 | ||||
Polymorphic memory resources | 17 | P0220 | ||||
| 17 | P0220 | |||||
| 17 | P0226 | |||||
| 17 | LWG2296 | |||||
| 17 | P0031 | |||||
constexpr std::atomic<T>::is_always_lock_free() | 17 | P0152 | ||||
std::enable_shared_from_this::weak_from_this() | 17 | P0033 | ||||
3-argument overload of std::hypot() | 17 | P0030 | ||||
| 17 | P0298 | |||||
| 17 | N3921 P0220 P0254 P0403 | |||||
| 17 | P0220 P0032 | |||||
| 17 | P0220 | |||||
C++17 should refer to C11 instead of C99 | 17 | P0063 | ||||
Splicing maps and sets ( std::map::extract(), std::map::merge() etc) | 17 | P0083 | ||||
emplace() return type in containers (instead of void) | 17 | P0084 | ||||
| 17 | P0088 | |||||
| 17 | P0209 | |||||
| 17 | P0258 | |||||
| 17 | P0295 | |||||
Replacement of class objects containing reference members ( std::launder()) | 17 | P0137 | ||||
| 17 | P0040 | |||||
| 17 | P0163 | |||||
| 17 | P0067 | |||||
std::shared_ptr and std::weak_ptr with array support | 17 | P0414 | ||||
| 17 | P0505 | |||||
std::shared_ptr<T[]> | 17 | P0497 | ||||
| 17 | P0426 | |||||
| 17 | P0218 P0219 | |||||
| 17 | P0154 | |||||
| 17 | P0156 | |||||
| 17 | LWG2911 | |||||
| 17 | P0604 | |||||
std::hash<filesystem::path> | 17 | LWG3657 |