Compiler support for C++23 - cppreference.com

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

C++23 feature Paper(s) GCC libstdc++

Clang libc++

MSVC STL

Apple Clang*

Stacktrace library

(

FTM

)*

P0881R7

P2301R1

12 (partial)*
14*19.34*

<stdatomic.h>

(

FTM

)*

P0943R6

12 15 19.31*14.0.3*

std::is_scoped_enum

(

FTM

)*

P1048R1

11 12 19.30*13.0.0*

std::basic_string::contains()

,

std::basic_string_view::contains()

(

FTM

)*

P1679R3

11 12 19.30*13.0.0*

std::to_underlying

(

FTM

)*

P1682R3

11 13 19.30*13.1.6* Relaxing requirements for

time_point<>::clock

P2212R2

N/AN/AN/AN/A

Providing size feedback

in the Allocator interface (

FTM

)*

P0401R6

16 15 19.30*14.0.3*

<spanstream>

: string-stream with

std::span

-based buffer (

FTM

)*

P0448R4

12 19.31*

std::out_ptr()

,

std::inout_ptr()

(

FTM

)*

P1132R8

14 19 19.30*constexpr

type_info::operator==()

(

FTM

)*

P1328R1

12 17 19.33**
19.34*15.0.0*Iterator pair constructors for

std::stack

and

std::queue

(

FTM

)*

P1425R4

12 14 19.31*14.0.3* Non-deduction context for allocators in container deduction guides

P1518R2

12* 13*19.31**13.1.6**

ranges::starts_with()

and

ranges::ends_with()

(

FTM

)*

P1659R3

16 17 (partial)*
18 19.31*16.0.0* Prohibiting

std::basic_string

and

std::basic_string_view

construction from

nullptr

P2166R1

12 13 19.30*13.1.6*

std::invoke_r()

(

FTM

)*

P2136R3

12 17 19.31*15.0.0* Range

constructor

for

std::basic_string_view

P1989R2

11 14 19.30*14.0.3* Default template arguments for

std::pair

's forwarding

constructor

P1951R1

14 14 19.30*14.0.3* Remove Garbage Collection and Reachability-Based Leak Detection (

library support

)

P2186R2

12 14 19.30*14.0.3*zip:

views::zip

,

views::zip_transform

,

views::adjacent

, and

views::adjacent_transform

(

FTM

)*

P2321R2

13 15 (partial)*
22 19.33*(partial)***
19.37*14.0.3*Heterogeneous erasure overloads for associative containers (

FTM

)*

P2077R3

16 19.32*

std::byteswap()

(

FTM

)*

P1272R4

12 14 19.31*14.0.3*

Printing

volatileT*

P1147R1

11.3 14 19.31*14.0.3*

basic_string::resize_and_overwrite()

(

FTM

)*

P1072R10

12 14 19.31*14.0.3*Monadic operations for

std::optional

(

FTM

)*

P0798R8

12 14 19.32*14.0.3*

std::move_only_function

(

FTM

)*

P0288R9

12 19.32* Add a conditional noexcept specification to

std::exchange

P2401R0

12 14 19.31*14.0.3* Require

std::span

&

std::basic_string_view

to be

TriviallyCopyable

P2251R1

Yes Yes 19.31* Yes Clarifying the status of the “C headers”

P2340R1

Yes Yes Yes Yes

<expected>

(

FTM

)*

P0323R12

P2549R1

12 16 19.33*15.0.0*constexpr for

<cmath>

and

<cstdlib>

(

FTM

)*

P0533R9

4.6 (partial)*19.52*

std::unreachable()

(

FTM

)*

P0627R6

12 15 19.32*14.0.3* Deprecating

std::aligned_storage

and

std::aligned_union

P1413R3

13 16 19.33*

std::reference_constructs_from_temporary

&

std::reference_converts_from_temporary

(

FTM

)*

P2255R2

13 (partial)*
14 21 (partial)*19.51*constexpr

std::unique_ptr

(

FTM

)*

P2273R3

12 16 19.33*15.0.0*Constructing containers and strings from ranges with

ranges::to()

, tagged constructors, insert and assign member functions (

FTM

)* (

FTM

)*

P1206R7

14 (partial)*
15 17 19.34*15.0.0*Pipe support for user-defined range adaptors (

ranges::range_adaptor_closure

,

std::bind_back

) (

FTM

)* (

FTM

)*

P2387R3

13 (partial)*
14 19 19.34*

ranges::iota()

,

ranges::shift_left()

, and

ranges::shift_right()

(

FTM

)* (

FTM

)*

P2440R1

13 (partial)*
16 23 19.34*

views::join_with

(

FTM

)*

P2441R2

13 21 19.34*

views::chunk

and

views::slide

(

FTM

)* (

FTM

)*

P2442R1

13 19.33*

views::chunk_by

(

FTM

)*

P2443R1

13 18 19.33*16.0.0*

std::mdspan

: a non-owning multidimensional array reference (

FTM

)*

P0009R18

P2599R2

P2604R0

P2613R1

P2763R1

16 17 (partial)*
18 19.39*15.0.0*

<flat_map>

(

FTM

)*

P0429R9

15 20 19.51*

<flat_set>

(

FTM

)*

P1222R4

15 21 19.51*

ranges::find_last()

,

ranges::find_last_if()

, and

ranges::find_last_if_not()

(

FTM

)*

P1223R5

13 19 19.36* Freestanding Library: Easy

<utility>

,

<ranges>

, and

<iterator>

P1642R11

13*19.38*

views::stride

(

FTM

)*

P1899R3

13 23 19.34*Compatibility between

std::tuple

and tuple-like objects (

FTM

)*

P2165R4

14 2.9 (partial)*19.36* (partial)*
19.37*partial*Rectifying constant iterators, sentinels, and ranges. views::as_const (

FTM

)*

P2278R4

13 19.35*(partial)*
19.36*

Formatting

Ranges (

FTM

)*

P2286R8

15 16 19.37*(partial)*
19.39*(partial)*
19.41*(partial)*
19.42*15.0.0*Improve default container

formatting

(

FTM

)*

P2585R1

15 16 (partial)*
17 19.42*15.0.0*Formatted output library

<print>

(

FTM

)*

P2093R14

P2539R4

14 17 (partial)*
18 19.37*15.0.0**
16.0.0*

Formatting

std::thread::id

and

std::stacktrace

(

FTM

)*

P2693R1

14 17 (partial)*19.38*15.0.0*constexpr for integral overloads of

std::to_chars()

and

std::from_chars()

(

FTM

)*

P2291R3

13 16 19.34*15.0.0*

ranges::contains()

and

ranges::contains_subrange()

(

FTM

)*

P2302R4

13 19 19.34*16.0.0**

Ranges fold algorithms

(

FTM

)*

P2322R6

13 23
18 (partial)*19.35*

views::cartesian_product

(

FTM

)*

P2374R4

P2540R1

13 19.37*Adding move-only types support for comparison concepts (

equality_comparable

,

totally_ordered

,

three_way_comparable

) (

FTM

)*

P2404R3

16 22 19.36*Ranges iterators as inputs to non-ranges algorithms (

FTM

)*

P2408R5

16 19.34*constexpr

std::bitset

(

FTM

)*

P2417R2

13 16 19.34*15.0.0*

basic_string::substr()

&&

P2438R2

16 16 19.34*15.0.0*

views::as_rvalue

(

FTM

)*

P2446R2

13 16 19.34*15.0.0*Standard Library Modules (

FTM

)*

P2465R3

15*17 (partial)*19.35*
(partial)*
19.36*

std::forward_like()

(

FTM

)*

P2445R1

14 16 19.34*15.0.0*Support exclusive mode for

std::fstream

(

FTM

)*

P2467R1

12 18 19.36*16.0.0*

views::repeat

(

FTM

)*

P2474R2

13 17 19.36*15.0.0*Relaxing range adaptors to allow for move-only types (

FTM

)*

P2494R2

14 17 19.34*15.0.0*

std::basic_string_view

range

constructor

should be explicit

P2499R0

12.2 16 19.34*15.0.0*

std::generator

: synchronous coroutine generator for ranges (

FTM

)*

P2502R2

P2787R0

14 19.43* Add a conditional noexcept specification to

std::apply

P2517R1

10 18 19.34*16.0.0*Explicit lifetime management (

std::start_lifetime_as

) (

FTM

)*

P2590R2

P2679R2

16 19.51*Clarify handling of encodings in localized formatting of chrono types (

FTM

)*

P2419R2

15*19.34**

std::move_iterator

should not always be

input_iterator

(

FTM

)*

P2520R0

12.3*17*19.34**15.0.0* Deduction guides update for

explicit object parameter

call operators

LWG3617

14 19.34* Deduction guides update for staticoperator()

P1169R4

13 16 19.39*15.0.0* Standard names and library support for

extended floating-point types

P1467R9

13 19.37**Monadic operations for

std::expected

(

FTM

)*

P2505R5

13 17 19.36*15.0.0*

views::enumerate

(

FTM

)*

P2164R9

13 23 19.37*

std::is_implicit_lifetime

(

FTM

)*

P2674R1

16 20 19.51*std::common_reference_t of

std::reference_wrapper

should be a reference type (

FTM

)* (

FTM

)*

P2655R3

16 21*19.37* Disallowing user specialization of

std::allocator_traits

P2652R2

19 19.37* Deprecating

std::numeric_limits::has_denorm

P2614R2

17 18 19.37*16.0.0* Making Multi-Param Constructors Of

views

explicit

P2711R1

16 21
17 (partial)*19.36**15.0.0*DR20: Relaxing Ranges Just A Smidge (

FTM

)*

P2609R3

15 20 19.37* DR20: Stashing Stashing Iterators For Proper Flattening

P2770R0

14 21
18 (partial) 19.37*DR17:

std::visit()

for classes derived from

std::variant

(

FTM

)*

P2162R2

11.3 13 19.20**
19.30*13.1.6* DR20: Conditionally borrowed ranges

P2017R1

11 16 19.30* DR20: Repairing

input range adaptors

and

std::counted_iterator

P2259R1

12 19.30*(partial)*
19.31* DR20:

views::join

should join all views of ranges

P2328R1

11.2 15 19.30*14.0.3*DR20:

view

does not require

default_initializable

(

FTM

)*

P2325R3

11.3 16 19.30*15.0.0* DR20: Range adaptor objects bind arguments by value

P2281R1

11 14 19.29 (16.10)*
(partial)*
19.31*14.0.3*DR20:

constexpr

for

std::optional

and

std::variant

(

FTM

)* (

FTM

)*

P2231R1

11.3 (partial)*
12 13 (partial)*
19 19.31*13.1.6* (partial) DR20:

views::lazy_split

and redesigned

views::split

P2210R2

12 16 19.31*15.0.0* DR20: Fix

ranges::istream_view

P2432R1

12 16 19.31*15.0.0*DR20:

view

with ownership (

FTM

)*

P2415R2

12 14 19.31*14.0.3*DR20: Fixing locale handling in chrono formatters (

FTM

)*

P2372R3

P2418R2

13 19.31* DR20: Cleaning up integer-class types

P2393R1

19.32*DR20: Compile-time format string checks; Reducing binary code size of

std::format()

family (

FTM

)*

P2216R3

13 14 (partial)*
15 19.32*14.0.3* DR20: Add support for non-const-formattable types to

std::format

P2418R2

13 15 19.32*14.0.3* DR20:

std::basic_format_string

P2508R1

13 15 19.35*14.0.3*DR20: Poison Pills are Too Toxic (

FTM

)*

P2602R2

14 19 19.36* DR20:

std::format

fill character allowances

P2572R1

14 17 19.37* DR20: Improving

std::format

's width estimation

P2675R1

14 17 19.38*DR20:

std::barrier

's phase completion guarantees (

FTM

)*

P2588R3

19.28 (16.8)**
19.36* C++23 feature

Paper(s)

GCC libstdc++

Clang libc++

MSVC STL

Apple Clang*