Menu
Home Explore People Places Arts History Plants & Animals Science Life & Culture Technology
On this page
C++23
Computer programming language

C++23, formally ISO/IEC 14882:2024, is the current open standard for the C++ programming language that follows C++20. The final draft of this version is N4950.

In February 2020, at the final meeting for C++20 in Prague, an overall plan for C++23 was adopted: planned features for C++23 were library support for coroutines, a modular standard library, executors, and networking.

The first WG21 meeting focused on C++23 was intended to take place in Varna in early June 2020, but was cancelled due to the COVID-19 pandemic, as was the November 2020 meeting in New York and the February 2021 meeting in Kona, Hawaii. All meetings until November 2022 were virtual while the November 2022 meeting until the final meeting in February 2023 was hybrid. The standard was technically finalized by WG21 at the hybrid meeting in Issaquah in February 2023.

We don't have any images related to C++23 yet.
We don't have any YouTube videos related to C++23 yet.
We don't have any PDF documents related to C++23 yet.
We don't have any Books related to C++23 yet.
We don't have any archived web articles related to C++23 yet.

Modern "Hello, world" Example

After many library changes applied to the working draft, the new "Hello, world" program will be: [1]

import std; int main() { std::println("Hello, world!"); }

Features

Changes that have been accepted into C++23 include:

Language

  • explicit this object parameter13
  • if consteval14
  • multidimensional subscript operator15
  • static call and subscript operators and static lambdas1617
  • simplifying implicit move18
  • auto(x) and auto{x}19
  • new preprocessor directives:
    • #elifdef and #elifndef20
    • #warning21
  • extending the lifetime of some temporaries in range-based for loop22
  • new standard attribute [[assume(expression)]]23
  • class template argument deduction from inherited constructors24
  • labels at the end of the compound statement25
  • alias declarations in init-statements26
  • literal suffixes for std::size_t and the corresponding signed type27
  • extended floating-point types with literals (conditionally supported)28
  • optional () from nullary lambda expressions29
  • attributes on lambda expressions30
  • constexpr changes:
    • non-literal variables, labels, and gotos in constexpr functions31
    • allowing static and thread_local variables that are usable in constant expressions in constexpr functions32
    • constexpr function does not need its return type and parameter types to be literal type
    • it is now possible to write a constexpr function for which no invocation satisfies the requirements of a core constant expression33
  • narrowing contextual conversions to bool in static_assert and if constexpr34
  • trimming whitespaces before line splicing35
  • make declaration order layout mandated36
  • delimited escape sequences37
  • named universal character escapes38
  • text encoding changes:
    • support for UTF-8 as a portable source file encoding39
    • consistent character literal encoding40
    • character sets and encodings41

Library

Standard Library Module Support

  • standard library modules std and std.compat42

Coroutine Library Support

  • synchronous coroutine std::generator for ranges43

General Utilities Support

  • result type std::expected44
  • monadic operations for std::optional45 and std::expected46
  • utility function std::to_underlying to get the underlying value of enum47
  • move-only callable wrapper std::move_only_function48
  • std::forward_like49
  • std::invoke_r50
  • std::bind_back51
  • std::byteswap52
  • std::unreachable: a function to mark unreachable code53
  • made std::tuple compatible with other tuple-like objects54
  • std::basic_common_reference specialization for std::reference_wrapper yielding reference types55
  • adding default arguments for std::pair's forwarding constructor56

Compile-time Support

  • constexpr support for:
    • std::type_info::operator==57
    • std::bitset58
    • std::unique_ptr59
    • for some <cmath> functions60
    • for integral overloads of std::to_chars and std::from_chars61
  • metaprogramming utilities:
    • type traits std::is_scoped_enum,62 std::is_implicit_lifetime,63 std::reference_constructs_from_temporary, and std::reference_converts_from_temporary.64
  • adding move-only types support for comparison concepts65

Iterators, Ranges, and Algorithm Support

  • new range conversion function std::ranges::to66
  • new constrained ranges algorithm:
    • std::ranges::starts_with
    • std::ranges::ends_with67
    • std::ranges::contains
    • std::ranges::contains_subrange68
    • std::ranges::find_last and other variants69
    • rangified versions of iota, shift_left, and shift_right70
    • range fold algorithms71
  • new std::ranges::range_adaptor_closure, a helper for defining user-defined range adaptor closures72
  • new range adaptors:
    • std::views::zip and other variants
    • std::views::adjacent and other variants73
    • std::views::join_with74
    • std::views::slide
    • std::views::chunk75
    • std::views::chunk_by76
    • std::views::as_rvalue77
    • std::views::as_const78
    • std::views::repeat79
    • std::views::stride80
    • std::views::cartesian_product81
    • std::views::enumerate82
  • rectifying constant iterators, sentinels, and ranges, that is, std::ranges::cbegin and other similar utilities returning constant iterators should be fully guaranteed even for shallow-const views (such as std::span)83
  • ranges iterators as inputs to non-ranges algorithms84
  • relaxing range adaptors to allow for move only types85
  • making multi-param constructors of some views explicit86

Memory Management Support

  • std::out_ptr and std::inout_ptr for C interoperability87
  • std::allocate_at_least and std::allocator::allocate_at_least88
  • explicit lifetime management function std::start_lifetime_as for implicit-lifetime types89
  • disallowing user specialization of std::allocator_traits90

String and Text Processing Support

  • new member functions and changes in string types:
    • std::basic_string_view::contains and std::basic_string::contains91
    • disabling construction from nullptr for std::basic_string and std::basic_string_view92
    • explicit range constructor for std::basic_string_view93
    • std::basic_string::resize_and_overwrite94
    • rvalue reference overload of std::basic_string::substr for efficient slicing95
  • formatting ranges, tuples, escaped presentation of characters and strings, std::thread::id, and stacktraces.969798

Diagnostic Support

  • stacktrace library99

I/O Support

  • formatted output functions std::print and std::println from new header <print>100
  • spanstream library (std::span-based string stream) from new header <spanstream>101
  • a support for exclusive mode in std::fstreams102
  • std::basic_ostream::operator<<(const volatile void*)103

Containers Support

  • multidimensional-span std::mdspan104105106107
  • constructability and assignability of containers from other compatible ranges108
  • flat set and flat map container adapters109110
  • non-deduction context for allocators in container deduction guides111
  • heterogeneous erasure overloads for associative containers112
  • allowing iterator pair construction in stack and queue113
  • requiring std::span and std::basic_string_view to be trivially copyable114

C-Compatibility Support

  • new header <stdatomic.h>115

Language defect reports

  • C++ identifier syntax using Unicode Standard Annex 31116
  • allowing duplicate attributes117
  • changing scope of lambda trailing return type118
  • making overloaded comparison operators less breaking change119
  • undeprecating volatile compound assignments120121
  • fixing the compatibility and portability of char8_t122
  • relaxing requirements on wchar_t to match existing practices123
  • allowing some pointers and references of this or unknown origin in constant expressions124
  • introduction of immediate-escalating functions promoted to immediate functions125
  • allowing static_assert(false) in uninstantiated template contexts

Library defect reports

  • changes in ranges library:
    • conditionally borrowed ranges126
    • repairing input range adaptors and std::counted_iterator127
    • relaxing the constraint on std::ranges::join_view128
    • renamed std::ranges::split_view to std::ranges::lazy_split_view and new split_view129
    • removed std::default_initializable constraint from concept std::ranges::view130
    • view with ownership and new std::ranges::owning_view131
    • fixed std::ranges::istream_view132
  • changes in text formatting library:
    • std::basic_format_string133
    • compile-time format string checks
    • reducing binary code size of std::format_to134
    • fixing locale handling in chrono formatters135
    • improving width estimation136 and fill character allowances of std::format137
    • use of forwarding references in format arguments to allow non-const-formattable types138
  • fully constexpr std::variant and std::optional139
  • supporting types derived from std::variant in std::visit140

Removed features and deprecation

Removed features:

  • Garbage Collection Support and (strict) Pointer Safety141 (meaning only relaxed pointer safety is to be relied upon142). This minimal garbage collection support (and pointer safety, needed for it), was added to C++11 but no compilers have ever supported it so the support was removed in C++23.143 However, that doesn't mean many GC implementations haven't been used, and continue to be used with C++, such as Boehm GC (and it can also just be used for leak detection in leak detection, when in debug mode), and such GC is often implemented in C++, for other languages to use.
  • Mixed wide-string literal concatenation.144
  • Non-encodable wide character literals and multicharacter wide character literals.145

Deprecated features:

  • std::aligned_storage and std::aligned_union146
  • std::numeric_limits::has_denorm147

Reverted deprecated features:

  • Use of comma operator in subscript expressions was no longer deprecated but the semantics has been changed to support overloadable n-adic operator[].
  • C headers (The corresponding <*.h> headers for compatibility with C)

Published as Technical Specifications

  • Concurrency TS v2148

Compiler support

  • Clang progressively added partial C++23 support from 2021 in version 13 through to version 18 in 2024, available through the option -std=c++23.149
  • GCC added partial, experimental C++23 support in 2021 in version 11 through the option -std=c++2b or -std=c++23 It also has an option to enable GNU extensions in addition to the experimental C++23 support, -std=gnu++2b.150

History

In the absence of face-to-face WG21 meetings, the following changes were applied after several virtual WG21 meetings, where they were approved by straw polls.

November 2020

The following were added after the virtual WG21 meeting of 9 November 2020, where they were approved by straw polls:151

  • Literal suffixes for std::size_t and the corresponding signed type
  • A member function contains for std::basic_string and std::basic_string_view, to check whether or not the string contains a given substring or character
  • A stacktrace library (<stacktrace>), based on Boost.Stacktrace
  • A type trait std::is_scoped_enum
  • The header <stdatomic.h>, for interoperability with C atomics

February 2021

After the virtual WG21 meeting of 22 February 2021, following features are added where they were approved by straw polls:152

  • Removing unnecessary empty parameter list () from lambda expressions.
  • Repairing input range adaptors and counted_iterator.
  • Relax the requirements for time_point::clock.153
  • std::visit for classes that are derived from std::variant.
  • Locks lock lockables.154
  • Conditionally borrowed ranges.
  • std::to_underlying.

June 2021

After the summer 2021 ISO C++ standards plenary virtual meeting of June 2021, new features and defect reports were approved by straw polls:155

  • Consteval if (if consteval).
  • Narrowing contextual conversions to bool.
  • Allowing duplicate attributes.
  • std::span-based string-stream (<spanstream>).
  • std::out_ptr() and std::inout_ptr().
  • constexpr for std::optional, std::variant, and std::type_info::operator==.
  • Iterators pair constructors for std::stack (stack) and std::queue (queue).
  • Few changes of the ranges library:
    • Generalized starts_with and ends_with for arbitrary ranges.
    • Renamed split_view to lazy_split_view and new split_view.
    • Relaxing the constraint on join_view.
    • Removing default_initializable constraint from concept view.
    • Range constructor for std::basic_string_view.
  • Prohibiting std::basic_string and std::basic_string_view construction from nullptr.
  • std::invoke_r.
  • Improvements on std::format.
  • Adding default arguments for std::pair's forwarding constructor.

October 2021

After the autumn 2021 ISO C++ standards plenary virtual meeting of October 2021, new features and defect reports were approved by straw polls:156

  • Non-literal variables, labels, and gotos in constexpr functions, but still ill-formed to evaluate them at compile-time.
  • Explicit this object parameter.
  • Changes on character sets and encodings.
  • New preprocessors: #elifdef and #elifndef. Both directives were added to C23 (C language update) and GCC 12.157
  • Allowing alias declarations in init-statement.
  • Overloading multidimensional subscript operator (e.g. arr[1, 2]).
  • Decay copy in language: auto(x) or auto{x}.
  • Changes in text formatting library:
    • Fixing locale handling in chrono formatters.
    • Use of forwarding references in format arguments to allow std::generator-like types.
  • Addition of type alias std::pmr::stacktrace which is equivalent to std::basic_stacktrace<std::pmr::polymorphic_allocator>.158
  • Changes in ranges library:
    • Refined definition of a view.
    • Replacing function template std::ranges::istream_view with alias templates std::ranges::istream_view, std::ranges::wistream_view, and customization point object std::views::istream.
    • zip range adaptor family:
      • zip_view
      • zip_transform_view
      • adjacent_view (and std::views::pairwise being equivalent to std::views::adjacent<2>)
      • adjacent_transform_view (and std::views::pairwise_transform being equivalent to std::views::adjacent_transform<2>)
  • std::move_only_function.
  • Monadic operations for std::optional.
  • Member function template std::basic_string::resize_and_overwrite.
  • Printing volatile pointers (volatile T*).
  • std::byteswap.
  • Heterogeneous erasure overloads for associative containers.
  • Every specialization of std::span and std::basic_string_view is trivially copyable.
  • Adding conditional noexcept specifications to std::exchange.159
  • Revamped specification and use of integer-class types.160
  • Clarify C headers. "The headers are not useful in code that is only required to be valid C++. Therefore, the C headers should be provided by the C++ standard library as a fully-supported, not deprecated part, but they should also be discouraged for use in code that is not polyglot interoperability code. [..] This proposal makes the C headers no longer deprecated, so there is no formal threat of future removal. The effective discouragement to use the C headers in pure C++ code is now spelled out explicitly as normative discouragement."161

February 2022

After the virtual WG21 meeting of 7 February 2022, the following features are added where they were approved by straw polls:162

  • Allowed attributes on the function call operator of a lambda
  • std::expected
  • constexpr for cmath and cstdlib
  • Function to mark unreachable code
  • ranges::to
  • A type trait to detect reference binding to temporary
  • Making std::unique_ptr constexpr
  • Pipe support for user-defined range adaptors
  • ranges::iota, ranges::shift_left and ranges::shift_right
  • views::join_with
  • Windowing range adaptors: views::chunk and views::slide
  • views::chunk_by

July 2022

After the virtual WG21 meeting of 25 July 2022, the following features and defect reports are added where they were approved by straw polls:163

  • Made rewriting equality in expressions less of a breaking change.
  • Reverted the deprecation of bitwise assignment to volatile variables.
  • Added the #warning preprocessor directive.
  • Removed non-encodable wide character literals and multicharacter wide character literals.
  • Allowed labels to appear at the end of compound statements.
  • Added escape sequences delimited with curly braces for octal and hexadecimal numbers and universal character names.
  • Allowed constexpr functions to never be constant expressions.
  • Simplified some implicit move rules from C++20 and allowed implicit move when returning an rvalue reference.
  • Add a way to specify unicode characters by name. For example, U'\N{LATIN CAPITAL LETTER A WITH MACRON}' // Equivalent to U'\u0100'
  • Allowed operator() and lambdas to be static.
  • Allowed the this pointer and references of unknown origin to appear in constant expressions.
  • Allowed implementations to define extended floating-point types in addition to the three standard floating-point types. Added the type aliases std::float16_t, std::float32_t, std::float64_t, std::float128_t, std::bfloat16_t for these extended types accessible through the header <stdfloat>, their corresponding literal suffixes f16 f32 f64 f128 bf16or F16 F32 F64 F128 BF16 and added overloads to various standard library functions that take floats as arguments.
  • Added the [[assume(expression)]] attribute which allows the compiler to assume the provided expression is true to allow optimizations.
  • Made support for UTF-8 source files mandatory, providing a portable encoding for source files.
  • Allowed arrays of char and unsigned char to be initialized with UTF-8 string literals.
  • Removed the requirement that wchar_t can encode all characters of the extended character set, in effect allowing UTF-16 to be used for wide string literals.
  • Added std::mdspan, a multidimensional array view analogous to std::span.
  • flat_map and flat_set were added to the standard library.
  • Added the std::print and std::println functions for printing formatted text to stdout.
  • Provide the named modules std and std.compat for importing the standard library.
  • Added support for exclusive mode fstreams, analogous to the "x" flag in fopen.
  • Allowed std::format to handle ranges, tuples, and other containers.
  • Added std::forward_like.
  • Made std::string::substr use move semantics.
  • Added std::generator which implements a coroutine generator that models std::ranges::input_range
  • views::cartesian_product, views::repeat, views::stride, views::as_const, views::as_rvalue.
  • Added new algorithms: ranges::find_last, ranges::contains, and ranges fold algorithms.
  • Made std::tuple compatible with other tuple-like objects.
  • Explicit lifetime management for implicit-lifetime types.
  • Made std::bitset and integral overloads of std::to_chars and std::from_chars constexpr-compatible.
  • Adding move-only types support for comparison concepts.
  • Ranges iterators as inputs to non-ranges algorithms.
  • Relaxing range adaptors to allow for move-only types.

November 2022

After the hybrid WG21 meeting of 7 November 2022, the following features and defect reports are added where they were approved by straw polls:164

  • Allowed operator[] to be static.
  • Allowed static and thread_local variables to appear in constexpr functions if they are usable in constant expressions.
  • consteval propagates upwards, that is, certain existing constexpr functions become consteval functions when those functions can already only be invoked during compile time.
  • Extended the lifetime of temporaries that appear in the for-range-initializer of a range-based for loop to cover the entire loop.
  • Reverted the deprecation of (all, not just bitwise) compound assignment to volatile variables.
  • Monadic functions for std::expected.
  • Synchronize the output of std::print with the underlying stream if the native Unicode API is used.165

February 2023

After the final hybrid WG21 meeting of 6-11 February 2023, the following features and defect reports are added where they were approved by straw polls:166

  • Referencing the Unicode Standard.167
  • Stashing stashing iterators for proper flattening.168
  • views::enumerate
  • making multi-param constructors of views explicit
  • relaxing ranges just a smidge
  • escaping improvements in std::format
  • improving std::format's width estimation
  • std::format fill character allowances
  • formatting thread::id and stacktrace
  • A type trait std::is_implicit_lifetime
  • std::common_reference_t of std::reference_wrapper should be a reference type
  • disallowing user specialization of std::allocator_traits
  • std::pmr::generator
  • deprecating std::numeric_limits::has_denorm
  • std::barrier's phase completion guarantees

References

  1. "ISO/IEC 14882:2024 Programming languages — C++". iso.org. https://www.iso.org/standard/83626.html

  2. "Working Draft, Standard for Programming Language C++" (PDF). Open Standards. ISO/IEC. 2023-05-10. Archived (PDF) from the original on Feb 16, 2024. https://open-std.org/JTC1/SC22/WG21/docs/papers/2023/n4950.pdf

  3. "N4951 Editors' Report: Programming Languages - C++". Open Standards. 2023-05-10. Archived from the original on 2023-06-05. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4951.html

  4. Dusíková, Hana (2019-11-06). "N4817: 2020 Prague Meeting Invitation and Information" (PDF). Open Standards. Archived (PDF) from the original on 2019-12-29. Retrieved 2020-02-13. http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/n4817.pdf

  5. Voutilainen, Ville (2019-11-25). "To boldly suggest an overall plan for C++23". Open Standards. Archived from the original on 2019-12-24. Retrieved 2020-02-13. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0592r4.html

  6. Lelbach, Bryce Adelstein; Winters, Titus; Fracassi, Fabio; Baker, Billy; Liber, Nevin; Bastien, JF; Stone, David; Ballo, Botond; Keane, Erich; Honermann, Tom (2020-04-20). "P2145R0: Evolving C++ Remotely". Open Standards. Archived from the original on Feb 12, 2024. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2145r0.html

  7. Sutter, Herb (29 July 2020). "Business Plan and Convener's Report: ISO/IEC JTC1/SC22/WG21 (C++)" (PDF). /wiki/Herb_Sutter

  8. "Upcoming Meetings, Past Meetings : Standard C++". isocpp.org. https://isocpp.org/std/meetings-and-participation/upcoming-meetings

  9. Sutter, Herb (29 July 2020). "Business Plan and Convener's Report: ISO/IEC JTC1/SC22/WG21 (C++)" (PDF). /wiki/Herb_Sutter

  10. "Upcoming Meetings, Past Meetings : Standard C++". isocpp.org. https://isocpp.org/std/meetings-and-participation/upcoming-meetings

  11. "Upcoming Meetings, Past Meetings : Standard C++". isocpp.org. https://isocpp.org/std/meetings-and-participation/upcoming-meetings

  12. "C++23 "Pandemic Edition" is complete (Trip report: Winter ISO C++ standards meeting, Issaquah, WA, USA)". herbsutter.com. 13 February 2023. https://herbsutter.com/2023/02/13/c23-pandemic-edition-is-complete-trip-report-winter-iso-c-standards-meeting-issaquah-wa-usa/

  13. Gašper Ažman; Sy Brand; Ben Deane; Barry Revzin (2021-07-12). "Deducing this". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0847r7.html

  14. Barry Revzin; Richard Smith; Andrew Sutton; Daveed Vandevoorde (2021-03-22). "if consteval". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1938r3.html

  15. Mark Hoemmen; Daisy Hollman; Corentin Jabot; Isabella Muerte; Christian Trott (2021-09-14). "Multidimensional subscript operator" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2128r6.pdf

  16. "static operator()". 2022-04-08. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1169r4.html

  17. "static operator[]" (PDF). 2022-11-11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2589r1.pdf

  18. "Simpler implicit move". 2022-03-23. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2266r3.html

  19. Zhihao Yuan (2021-07-12). "auto(x): decay-copy in the language". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0849r8.html

  20. Melanie Blower (2021-04-30). "Add support for preprocessing directives elifdef and elifndef" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2334r1.pdf

  21. Aaron Ballman (2022-01-13). "Support for #warning" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2437r1.pdf

  22. "Wording for P2644R1 Fix for Range-based for Loop". 2022-11-11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2718r0.html

  23. "Portable assumptions" (PDF). 2022-04-22. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1774r8.pdf

  24. Timur Doumler (2022-05-20). "Wording for class template argument deduction from inherited constructors" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2582r1.pdf

  25. "Labels at the end of compound statements (C compatibility)" (PDF). 2022-01-13. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2324r2.pdf

  26. Jens Maurer (2021-04-13). "Extend init-statement to allow alias-declaration". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2360r0.html

  27. JeanHeyd Meneide; Rein Halbersma (2019-11-24). "Literal Suffix for (signed) size_t". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0330r8.html

  28. "Extended floating-point types and standard names". 2022-04-22. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1467r9.html

  29. Alex Christensen; JF Bastien (2020-12-11). "P1102R2: Down with ()!". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1102r2.html

  30. "Attributes on Lambda-Expressions" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2173r1.pdf

  31. Ville Voutilainen (2021-07-12). "Non-literal variables (and labels and gotos) in constexpr functions". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2242r3.html

  32. "Permitting static constexpr variables in constexpr functions". 2022-11-07. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2647r1.html

  33. "Relaxing some constexpr restrictions". 2022-01-27. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2448r2.html

  34. Andrzej Krzemieński (2021-04-12). "Narrowing contextual conversions to bool". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1401r5.html

  35. Corentin Jabot (2021-04-13). "Trimming whitespaces before line splicing" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2223r2.pdf

  36. Pal Balog (2021-04-02). "Make declaration order layout mandated" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1847r4.pdf

  37. "Delimited escape sequences" (PDF). 2022-02-25. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2290r3.pdf

  38. "Named universal character escapes". 2022-03-25. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2071r2.html

  39. "Support for UTF-8 as a portable source file encoding" (PDF). 2022-07-01. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2295r6.pdf

  40. Corentin Jabot (2021-09-14). "Consistent character literal encoding" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2316r2.pdf

  41. Jens Maurer (2021-09-21). "Character sets and encodings". https://isocpp.org/files/papers/P2314R4.html

  42. "Standard Library Modules std and std.compat" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2465r3.pdf

  43. "(std::generator: Synchronous Coroutine Generator for Ranges)" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2502r2.pdf

  44. Vicente Botet; JF Bastien; Jonathan Wakely (2022-01-07). "std::expected". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0323r12.html

  45. Sy Brand (2021-04-27). "Monadic operations for std::optional". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0798r6.html

  46. Jeff Garland (2022-09-28). "P2505R5 Monadic Functions for std::expected". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2505r5.html

  47. JeanHeyd Meneide (2021-01-22). "std::to_underlying for enumerations". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1682r3.html

  48. Matt Calabrese; Ryan McDougall (2021-07-09). "move_only_function". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0288r9.html

  49. Gašper Ažman (2022-05-13). "std::forward_like" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2445r1.pdf

  50. Zhihao Yuan (2020-04-29). "invoke_r". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2136r3.html

  51. Barry Revzin (2021-12-17). "Pipe support for user-defined range adaptors". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2387r3.html

  52. Isabella Muerte; Corentin Jabot (2021-09-17). "Byteswapping for fun&&nuf". https://isocpp.org/files/papers/P1272R4.html

  53. Melissa Mears; Jens Maurer (2021-10-15). "Function to mark unreachable code" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0627r6.pdf

  54. Corentin Jabot (2022-07-15). "Compatibility between tuple, pair and tuple-like objects" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2165r4.pdf

  55. Hui Xie; S. Levent Yilmaz; Tim Song (2023-02-07). "common_reference_t of reference_wrapper Should Be a Reference Type". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2655r3.html

  56. "Wording for P2644R1 Fix for Range-based for Loop". 2022-11-11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2718r0.html

  57. Peter Dimov (2021-05-01). "Making std::type_info::operator== constexpr". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1328r1.html

  58. Daniil Goncharov (2022-06-25). "A more constexpr bitset" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2417r2.pdf

  59. Andreas Fertig (2021-11-06). "Making std::unique_ptr constexpr" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2273r3.pdf

  60. Edward J. Rosten; Oliver J. Rosten (2021-11-12). "constexpr for and " (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0533r9.pdf

  61. Daniil Goncharov; Alexander Karaev (2021-09-18). "Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in Header" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2291r3.pdf

  62. Juan Alday (2020-10-12). "A proposal for a type trait to detect scoped enumerations" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1048r1.pdf

  63. Timur Doumler; Vittorio Romeo (2022-11-11). "A trait for implicit lifetime types" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2674r1.pdf

  64. Tim Song (2021-10-13). "A type trait to detect reference binding to temporary". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2255r2.html

  65. Justin Bassett (2022-07-02). "Move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2404r3.pdf

  66. Corentin Jabot; Eric Niebler; Casey Carter (2022-01-21). "Conversions from ranges to containers" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1206r7.pdf

  67. Christopher Di Bella (2021-02-19). "starts_with and ends_with". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1659r3.html

  68. Christopher Di Bella (2021-04-16). "std::ranges::contains". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2302r4.html

  69. Zach Laine (2022-06-17). "find_last" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1223r5.pdf

  70. Tim Song (2021-12-05). "ranges::iota, ranges::shift_left, and ranges::shift_right". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2440r1.html

  71. Barry Revzin (2022-04-22). "ranges::fold". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2322r6.html

  72. Barry Revzin (2021-12-17). "Pipe support for user-defined range adaptors". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2387r3.html

  73. Tim Song (2021-06-11). "zip". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2321r2.html

  74. Barry Revzin (2022-01-28). "views::join_with". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2441r2.html

  75. Tim Song (2021-12-05). "Windowing range adaptors: views::chunk and views::slide". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2442r1.html

  76. Tim Song (2021-11-19). "views::chunk_by". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2443r1.html

  77. Barry Revzin (2022-02-14). "views::as_rvalue". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2446r2.html

  78. Barry Revzin (2022-06-17). "cbegin should always return a constant iterator". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html

  79. Michał Dominiak (2022-07-13). "views::repeat". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2474r2.html

  80. Christopher Di Bella; Tim Song (2022-07-08). "stride_view". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1899r3.html

  81. Sy Brand; Michał Dominiak (2022-07-13). "views::cartesian_product". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2374r4.html

  82. Corentin Jabot (2022-12-07). "views::enumerate" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2164r9.pdf

  83. Barry Revzin (2022-06-17). "cbegin should always return a constant iterator". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2278r4.html

  84. David Olsen (2022-04-22). "Ranges iterators as inputs to non-Ranges algorithms". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2408r5.html

  85. Michał Dominiak (2022-07-13). "Relaxing range adaptors to allow for move only types". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2494r2.html

  86. Ville Voutilainen (2022-11-12). "Making multi-param constructors of views explicit". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2711r1.html

  87. JeanHeyd Meneide; Todor Buyukliev; Isabella Muerte (2021-04-15). "out_ptr - a scalable output pointer abstraction". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1132r7.html

  88. Jonathan Wakely; Chris Kennelly (2021-01-22). "Providing size feedback in the Allocator interface". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0401r6.html

  89. Timur Doumler; Richard Smith (2022-07-15). "Explicit lifetime management" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2590r2.pdf

  90. Pablo Halpern (2023-02-08). "Disallow User Specialization of allocator_traits". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2652r2.html

  91. Wim Leflere; Paul Fee (2020-06-13). "string contains function". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1679r3.html

  92. Yuriy Chernyshov (2020-09-06). "A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2166r1.html

  93. Corentin Jabot (2021-03-17). "Range constructor forstd::string_view 2: Constrain Harder" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1989r2.pdf

  94. Chris Kennelly; Mark Zeren (2021-09-14). "basic_string::resize_and_overwrite". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1072r10.html

  95. "std::string::substr() &&". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2438r2.html

  96. "Formatting Ranges". 16 May 2022. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2286r8.html

  97. Barry Revzin (2022-07-15). "Improve default container formatting". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2585r1.html

  98. Corentin Jabot; Victor Zverovich (2023-02-09). "Formatting thread::id and stacktrace" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2693r1.pdf

  99. Alexey Gorgurov; Antony Polukhin (2020-09-16). "A Proposal to add stacktrace library". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0881r7.html

  100. "Formatted output". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2093r14.html

  101. Peter Sommerlad (2021-02-26). "A strstream replacement using span as buffer" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0448r4.pdf

  102. "Support exclusive mode for fstreams". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2467r1.html

  103. Bryce Adelstein Lelbach (2021-09-25). "Printing volatile Pointers". https://isocpp.org/files/papers/P1147R1.html

  104. "MDSPAN". 13 July 2022. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html

  105. "index_type & size_type in mdspan" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2599r2.pdf

  106. "mdspan: rename pointer and contiguous". 15 June 2022. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2604r0.html

  107. "Add the missing empty to mdspan". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2613r1.html

  108. Corentin Jabot; Eric Niebler; Casey Carter (2022-01-21). "Conversions from ranges to containers" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1206r7.pdf

  109. "A Standard flat_map" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0429r9.pdf

  110. "A Standard flat_set" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1222r4.pdf

  111. Arthur O'Dwyer; Mike Spertus (2021-03-14). "Stop overconstraining allocators in container deduction guides". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html

  112. Konstantin Boyarinov; Sergey Vinogradov; Ruslan Arutyunyan (2020-12-15). "Heterogeneous erasure overloads for associative containers". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2077r2.html

  113. Corentin Jabot (2021-03-05). "Iterators pair constructors for stack and queue" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1425r4.pdf

  114. Nevin Liber (2021-03-19). "Require span & basic_string_view to be TriviallyCopyable" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2251r1.pdf

  115. Hans-J. Boehm (2020-10-23). "P0943R6: Support C atomics in C++". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0943r6.html

  116. Steve Downey; Zach Laine; Tom Honermann; Peter Bindels; Jens Maurer (2021-04-12). "C++ Identifier Syntax using Unicode Standard Annex 31". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1949r7.html

  117. Erich Keane (2020-07-02). "Allow Duplicate Attributes" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2156r1.pdf

  118. Barry Revzin (2021-09-14). "Change scope of lambda trailing-return-type". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2036r3.html

  119. "The Equality Operator You Are Looking For". 2022-01-13. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2468r2.html

  120. "De-deprecating volatile compound operations" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2327r1.pdf

  121. "Core Language Working Group NB comment resolutions for the November, 2022 meeting : 2654. Un-deprecation of compound volatile assignments". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2710r0.html#2654

  122. "char8_t Compatibility and Portability Fix". 2022-06-17. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2513r3.html

  123. "Relax requirements on wchar_t to match existing practices" (PDF). 2022-07-15. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2460r2.pdf

  124. "Using unknown pointers and references in constant expressions". 8 April 2022. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2280r4.html

  125. "consteval needs to propagate up". 2022-11-11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2564r3.html

  126. Barry Revzin (2020-02-19). "Conditionally borrowed ranges". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2017r1.html

  127. Tim Song (2021-01-12). "Repairing input range adaptors and counted_iterator". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2259r1.html

  128. Tim Song (2021-05-06). "join_view should join all views of ranges". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2328r1.html

  129. Barry Revzin (2021-03-05). "Superior String Splitting". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2210r2.html

  130. Barry Revzin (2021-05-14). "Views should not be required to be default constructible". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2325r3.html

  131. Barry Revzin; Tim Song (2021-08-15). "What is a view?". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2415r1.html

  132. Nicolai Josuttis (2021-09-24). "Fix istream_view" (PDF). https://isocpp.org/files/papers/P2432R1.pdf

  133. Barry Revzin (2022-01-18). "Expose std::basic-format-string". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2508r1.html

  134. Victor Zverovich (2021-02-05). "std::format improvements". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2216r3.html

  135. Victor Zverovich; Corentin Jabot (2021-09-11). "Fixing locale handling in chrono formatters". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2372r3.html

  136. Corentin Jabot (2022-12-02). "format's width estimation is too approximate and not forward compatible" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2675r1.pdf

  137. Tom Honermann (2023-02-08). "std::format() fill character allowances". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2572r1.html

  138. Victor Zverovich (2021-09-24). "Add support for std::generator-like types to std::format". https://isocpp.org/files/papers/P2418R2.html

  139. Barry Revzin (2021-02-11). "Missing constexpr in std::optional and std::variant". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2231r1.html

  140. Barry Revzin (2020-10-30). "Inheriting from std::variant". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2162r2.html

  141. "std::pointer_safety - cppreference.com". en.cppreference.com. Retrieved 2024-12-09. https://en.cppreference.com/w/cpp/memory/gc/pointer_safety

  142. "[basic.stc.dynamic.safety]". timsong-cpp.github.io. Retrieved 2024-12-09. https://timsong-cpp.github.io/cppwp/n4868/basic.stc.dynamic.safety#4

  143. JF Bastien; Alisdair Meredith (2021-04-16). "Removing Garbage Collection Support". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2186r2.html

  144. Jens Maurer (2021-04-12). "Mixed string literal concatenation". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2201r1.html

  145. "Remove non-encodable wide character literals and multicharacter wide character literals" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2362r3.pdf

  146. CJ Johnson (2021-11-22). "Deprecate std::aligned_storage and std::aligned_union" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1413r3.pdf

  147. Matthias Kretz (2022-11-08). "Deprecate numeric_limits::has_denorm" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2614r2.pdf

  148. "Programming Languages — Technical specification for C++ extensions for concurrency 2" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4956.pdf

  149. "C++ Support in Clang". https://clang.llvm.org/cxx_status.html#cxx23

  150. "C++ Standards Support in GCC - GNU Project". https://gcc.gnu.org/projects/cxx-status.html

  151. Ranns, Nina (2020-11-19). "WG21 2020-11 Virtual Meeting: Minutes of Meeting" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4877.pdf

  152. Ranns, Nina (2021-02-22). "WG21 2021-02 Virtual Meeting: Minutes of Meeting" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4877.pdf

  153. Alexey Dmitriev; Howard Hinnant (2020-10-22). "Relax Requirements for time_point::clock". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2212r2.html

  154. Tim Song (2020-11-13). "Locks lock lockables". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2160r1.html

  155. Ranns, Nina (2021-06-07). "WG21 2021-06 Virtual Meeting Minutes of Meeting" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/n4891.pdf

  156. Ranns, Nina (2021-10-04). "WG21 2021-10 Virtual Meeting Minutes of Meeting" (PDF). https://isocpp.org/files/papers/N4898.pdf

  157. "GCC 12 Adds Support For New #elifdef #elifndef Directives". phoronix. May 12, 2021. Archived from the original on December 27, 2022. https://www.phoronix.com/news/GCC-12-elifdef-elifndef

  158. Steve Downey (2021-06-14). "Add a pmr alias for std::stacktrace". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2301r1.html

  159. Giuseppe D'Angelo (2021-06-28). "Add a conditional noexcept specification to std::exchange". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2401r0.html

  160. Tim Song (2021-08-06). "Cleaning up integer-class types". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2393r1.html

  161. Thomas Köppe (2021-06-11). "Clarifying the status of the "C headers"". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2340r1.html

  162. Ranns, Nina (2022-02-07). "WG21 2022-02 Virtual Meeting: Minutes of Meeting" (PDF). http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4907.pdf

  163. Ranns, Nina (2022-08-09). "WG21 2022-07 Virtual Meeting: Minutes of Meeting" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4916.pdf

  164. Ranns, Nina (2022-12-05). "WG21 2022-11 Hybrid Meeting: Minutes of Meeting" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4933.pdf

  165. Victor Zverovich (2022-11-08). "Should the output of std::print to a terminal be synchronized with the underlying stream?". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2539r4.html

  166. Ranns, Nina (2023-03-06). "WG21 2023-02 Hybrid Meeting: Minutes of Meeting" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4943.pdf

  167. Corentin Jabot (2023-02-09). "Referencing The Unicode Standard" (PDF). https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2736r2.pdf

  168. Tim Song (2023-01-31). "Stashing stashing iterators for proper flattening". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2770r0.html