Compiler support for C++26 - cppreference.com (original) (raw)

* - hover over a cell marked with the star * to see additional pop-up notes.
DR_nn_ - the number nn after "DR" denotes target C++ revision the Defect Report is applied to, e.g., DR20 → C++20.

[edit] C++26 core language features

| C++26 feature | Paper(s) | GCC | Clang | MSVC | Apple Clang | EDG eccp | Intel C++ | Nvidia HPC C++ (ex PGI)* | Nvidia nvcc | Cray | | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------- | --- | ---------------- | ---- | ----------- | -------- | --------- | ------------------------- | ----------- | ---- | | | DR98: Removing undefined behavior from lexing | P2621R3 | Yes | 3.3 | | 16.0.0* | | | | | | | | DR98: Making non-encodable string literals ill-formed | P1854R4 | 14 | 14 | | 16.0.0* | | | | | | | | Unevaluated strings | P2361R6 | 14 | 17 (partial)*18 | | 16.0.0* | | | | | | | | Adding @, $, and ` to the basic character set | P2558R2 | 15 | Yes | | 16.0.0* | | | | | | | | constexpr cast from void* (FTM)* | P2738R1 | 14 | 17 | | | | | | | | | | DR20: On the ignorability of standard attributes | P2552R3 | 15 | Yes | | | | | | | | | | DR11: Static storage for braced initializers | P2752R3 | 14 | | | | | | | | | | | User-generated static_assert messages (FTM)* | P2741R3 | 14 | 17 | | | | | | | | | | Placeholder variables with no name (FTM)* | P2169R4 | 14 | 18 | | | | | | | | | | Pack indexing (FTM)* | P2662R3 | 15 | 19 | | | | | | | | | | Removing deprecated arithmetic conversion on enumerations | P2864R2 | 14 | 18 | | | | | | | | | | DR11/20: Template parameter initialization | P2308R1 | 9 | 18 | | | | | | | | | | Disallow binding a returned reference to a temporary | P2748R5 | 14 | 19 | | | | | | | | | | Attributes for structured bindings (FTM)* | P0609R3 | 15 | 19 | | | | | | | | | | Erroneous behavior for uninitialized reads, [[indeterminate]] attribute | P2795R5 | | | | | | | | | | | | = delete("reason"); (FTM)* | P2573R2 | 15 | 19 | | | | | | | | | | Variadic friends (FTM)* | P2893R3 | 15 | 20 | | | | | | | | | | DR98: Clarifying rules for brace elision in aggregate initialization | P3106R1 | Yes | 17 | | | | | | | | | | DR20: Disallow module declarations to be macros | P3034R1 | 15 | | | | | | | | | | | DR11: Trivial infinite loops are not undefined behavior | P2809R3 | 14 | 19 | | | | | | | | | | constexpr placement new (FTM)* (FTM)* | P2747R2 | 15 | 20 | | | | | | | | | | Structured binding declaration as a condition (FTM)* | P0963R3 | 15 | 6 (partial)*21 | | | | | | | | | | Ordering of constraints involving fold expressions (FTM)* | P2963R3 | | 19 | | | | | | | | | | Deleting a pointer to an incomplete type should be ill-formed | P3144R2 | 15 | 19 | | | 6.7 | | | | | | | Structured bindings can introduce a pack (FTM)* | P1061R10 | | 21 | | | | | | | | | | constexpr structured bindings and references to constexpr variables | P2686R5 | | | | | 6.7 | | | | | | | constexpr exceptions: [1], [2] (FTM)* | P3068R6 | | | | | | | | | | | | Oxford variadic comma | P3176R1 | 15 | 20 | | | | | | | | | | Removing deprecated array comparisons | P2865R6 | 15 | 20 | | | | | | | | | | #embed (FTM)* | P1967R14 | 15 | 19* | | | | | | | | | | Concept and variable-template template-parameters (FTM)* | P2841R7 | | | | | | | | | | | | Trivial relocatability (FTM)* | P2786R13 | | 21* | | | | | | | | | | Trivial unions (FTM)* | P3074R7 | | | | | | | | | | | | Observable checkpoints | P1494R5 | | | | | | | | | | | | Contracts (FTM)* | P2900R14 | | | | | | | | | | | | C++26 feature | Paper(s) | GCC | Clang | MSVC | Apple Clang | EDG eccp | Intel C++ | Nvidia HPC C++ (ex PGI)* | Nvidia nvcc | Cray | |

[edit] C++26 library features

| C++26 feature | Paper(s) | GCC libstdc++ | Clang libc++ | MSVC STL | Apple Clang* | | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------- | -------------- | ------------------- | ------------- | | | Testing for success or failure of functions (FTM)* | P2497R0 | 14 | 18 | | 16.0.0* | | | std::text_encoding: text encodings identification (FTM)* | P1885R12P2862R1 | 14 | | | | | | Arithmetic overloads of std::to_string and std::to_wstring use std::format (FTM)* | P2587R3 | 14 | | | | | | Type checking format args (FTM)* | P2757R3 | 15 | | | | | | Formatting pointers (FTM)* | P2510R3 | 14* | 17* | 19.40** | | | | Hashing support for std::chrono value classes (FTM)* | P2592R3 | | | | | | | : Read-Copy Update (FTM)* | P2545R4 | | | | | | | <hazard_pointer>: Hazard pointers (FTM)* | P2530R3 | | | | | | | ADL-proof std::projected | P2538R1 | 14* | 18* | 19.38** | 16.0.0* | | | constexpr stable sorting (FTM)* | P2562R1 | 15 | 21 | | | | | Member std::basic_format_arg::visit() (FTM)* | P2637R3 | 15 | 19 | | | | | Member std::variant::visit() (FTM)* | P2637R3 | 15 | 18 | | | | | std::is_within_lifetime (FTM)* | P2641R4 | | | | | | | Extending associative containers with the remaining heterogeneous overloads (FTM)* | P2363R5 | | | | | | | Enabling the use of std::weak_ptr as keys in unordered associative containers (FTM)* | P1901R2 | | | | | | | Native handles in file streams (FTM)* | P1759R6 | 14 | 18 | | 16.0.0* | | | Interfacing string streams with std::string_view (FTM)* | P2495R3 | | 19 | | | | | Interfacing std::bitset with std::string_view (FTM)* | P2697R1 | | 18 | | 16.0.0* | | | More constexpr for and (FTM)* (FTM)* | P1383R2 | 4.6 (partial)* | | | | | | Adding the new 2022 SI prefixes on ratios: std::quecto, std::ronto, std::ronna, and std::quetta (FTM)* | P2734R0 | 14 | 17* | | | | | std::function_ref: type-erased callable reference (FTM)* | P0792R14 | | | | | | | std::copyable_function (FTM)* | P2548R6 | 16 | | | | | | std::bind_front, std::bind_back, and std::not_fn to NTTP callables (FTM)* (FTM)* (FTM)* | P2714R1 | | | | | | | std::submdspan() (FTM)* | P2630R4P3355R1 | | | | | | | Freestanding language: Optional ::operator new | P2013R5 | | | N/A | | | | Freestanding std::char_traits, std::errc and facilities in: , , , (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2338R4 | | | N/A | | | | More freestanding facilities (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2198R7 | | | N/A | | | | Saturation arithmetic (FTM)* | P0543R3 | 14 | 18 | | 16.0.0* | | | : Debugging support (FTM)* | P2546R5P2810R4 | | | | | | | : A free function linear algebra interface based on the BLAS (FTM)* | P1673R13P3050R2P3222R0 | | | | | | | Making assert() macro user friendly | P2264R7 | | | | | | | Runtime format strings (FTM)* | P2918R2 | 14 | 18 | | 16.0.0* | | | std::span over an initializer list (FTM)* | P2447R6 | 15 | 18 | | 16.0.0* | | | std::span::at() (FTM)* | P2821R5 | 14 | 18 | | 16.0.0* | | | Added tuple protocol to std::complex (FTM)* | P2819R2 | 15 | 19 | | | | | A new specification for std::generate_canonical | P0952R2 | | | 19.42* | | | | Removing deprecated typedef std::allocator::is_always_equal | P2868R3 | 15 | 18 | | 16.0.0* | | | Removing function overload of std::basic_string::reserve() that takes no argument | P2870R3 | | 18 | | 16.0.0* | | | Removing deprecated Unicode conversion facets () | P2871R3 | | 18 | | 16.0.0* | | | Freestanding: removing std::strtok (FTM)* | P2937R0 | 14 | | 19.40* | | | | Freestanding library: partial classes (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2407R5 | 14 | | 19.42* | | | | Freestanding library: std::inout, std::expected, std::span (FTM)* (FTM)* (FTM)* (FTM)* | P2833R2 | 14 | | 19.42* | | | | DR23: std::basic_const_iterator should follow its underlying type’s convertibility (FTM)* | P2836R1P2950R0 | 14 | | 19.40* | | | | DR20: std::make_format_args now accepts only lvalue references instead of forwarding references | P2905R2 | 14 | 18 | 19.40* | 16.0.0* | | | DR20: Fix formatting of code units as integers (FTM)* | P2909R4 | 13.3 | 18 | 19.40* | 16.0.0* | | | views::concat (FTM)* | P2542R8 | 15 | | | | | | Concatenation of strings and string views (FTM)* | P2591R5 | 15 | 19 | | | | | Enabling list-initialization for algorithms (FTM)* | P2248R8P3217R0 | 15 | | | | | | std::ranges::generate_random (FTM)* | P1068R11 | | | | | | | Comparisons for std::reference_wrapper, and constraints for comparisons of std::pair, std::tuple, std::optional, and std::variant (FTM)* (FTM)* | P2944R3 | 14 | 19 (partial)* | | | | | Padded mdspan layouts (FTM)* | P2642R6 | | | | | | | New CTAD for std::span and std::mdspan with integral constants | P3029R1 | | 19 | | | | | Atomic maximum and minimum (FTM)* | P0493R5 | | | | | | | std::formatterstd::filesystem::path (FTM)* | P2845R8 | | | | | | | Printing Blank Lines with std::println() (FTM)* | P3142R0 | 14* | 19* | 19.41** | | | | Undeprecate std::polymorphic_allocator::destroy | P2875R4 | | 15 | 19.41* | | | | Removing deprecated strstreams | P2867R2 | | 19 | | | | | Removing deprecated std::shared_ptr Atomic Access APIs | P2869R4 | | | | | | | Removing std::wstring_convert | P2872R3 | | 19 | | | | | DR23: Permit an efficient implementation of std::print (FTM)* | P3107R5P3235R3 | | | 19.43* | | | | Execution control library (FTM)* | P2300R10P3396R0 | | | | | | | std::inplace_vector: dynamically-resizable vector with fixed capacity (FTM)* | P0843R14 | | | | | | | std::philox_engine: counter-based random number engine (FTM)* | P2075R6 | | | | | | | std::optional range support (FTM)* | P3168R2 | | | | | | | std::is_virtual_base_of: type trait for detecting virtual base classes (FTM)* | P2985R0 | 15 | 20 | | | | | std::dims for std::mdspan (FTM)* | P2389R2 | | 19 | | | | | DR11: Formal specification of the type of std::ignore | P2968R2 | 15 | 19 | 19.42* | | | | DR20: Removing the common reference requirement from the indirectly invocable concepts (FTM)* | P2997R1 | 15 | 19 | 19.42* | | | | Deprecating std::is_trivial and std::is_trivial_v | P3247R2 | 15 | 21 | | | | | DR20: Algorithm function objects | P3136R1 | Yes | 14 | 19.39* | 14.0.3* | | | std::ranges::cache_latest_view (FTM)* | P3138R5 | 15 | | | | | | Constraining std::expected equality operators (FTM)* | P3379R0 | 15 | | | | | | std::aligned_accessor: an std::mdspan accessor expressing pointer over-alignment (FTM)* | P2897R7 | | 21 | | | | | std::is_sufficiently_aligned: checks a pointer’s alignment precondition (FTM)* | P2897R7 | | 21 | | | | | std::atomic_ref::address() (FTM)* | P2835R7 | | | | | | | DR11/20: cv-qualified types in std::atomic and std::atomic_ref | P3323R1 | | | 19.44* | | | | constexpr std::atomic and std::atomic_ref (FTM)* | P3309R3 | | | | | | | constexpr for specialized memory algorithms (FTM)* | P3508R0P3369R0 | 15 | | | | | | <stdbit.h> and <stdckdint.h> | P3370R1 | 15 | | | | | | : data-parallel types (FTM)* (FTM)* | P1928R15P3430R3P3441R2P3287R3P2663R7P2933R4 | | | | | | | A utility for creating execution environments | P3325R5 | | | | | | | constexpr for exception types, e.g. std::bad_alloc, std::bad_cast etc. (FTM)* | P3068R6P3378R2 | | | | | | | Trivial relocatability traits and operations (FTM)* | P2786R13 | | | | | | | Defang and deprecate std::memory_order::consume | P3475R1 | | | | | | | Put std::monostate in | P0472R3 | 15 | 21 | 19.50* | | | | std::indirect (FTM)* | P3019R14 | | | | | | | std::polymorphic (FTM)* | P3019R14 | | | | | | | More constexpr for containers and container adaptors:std::deque,std::flat_map, std::flat_multimap,std::flat_set, std::flat_multiset,std::forward_list,std::list,std::map, std::multimap,std::queue, std::priority_queue,std::set, std::multiset,std::stack,std::unordered_map, std::unordered_multimap,std::unordered_set, and std::unordered_multiset (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P3372R3 | | | | | | | constexpr std::inplace_vector for non-trivial types (FTM)* | P3074R7 | | | | | | | std::ranges::to_input_view (FTM)* | P3137R3 | 15 | | | | | | std::ranges::approximately_sized_range and std::ranges::reserve_hint (FTM)* | P2846R6 | | | | | | | : A bucket-based container that re-uses memory locations from erased elements (FTM)* | P0447R28 | | | | | | | : Contract-violation handling support (FTM)* | P2900R14 | | | | | | | Standard library hardening (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P3471R4 | 15 (partial)* | | 19.44* (partial)* | | | | Freestanding library: , , , (, ) (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* | P2976R1 | | | | | | | DR20: Converting contiguous iterators to pointers | P3349R0 | 15 | | | | | | C++26 feature | Paper(s) | GCC libstdc++ | Clang libc++ | MSVC STL | Apple Clang* | |