C++23

C++23, formally ISO/IEC 14882:2024 (the seventh edition), is the version of the C++ programming language standard published in October 2024. It follows C++20. N4950 is the final WG21 working draft for C++23, and WG21 completed the technical work on the revision at its meeting in February 2023. The successor revision, commonly referred to as C++26, is being developed as ISO/IEC DIS 14882, which ISO identifies as the next version intended to replace ISO/IEC 14882:2024.

Compiler support for C++23 varies by compiler version, language feature, and standard-library component. Clang lists C++23 mode as partial, while GCC describes its implementation as experimental; Microsoft publishes feature-by-feature conformance information for Visual C++.

Features

Changes accepted into C++23 include the following language and standard-library features. A feature-by-feature summary is also maintained by cppreference.

Language

  • explicit this object parameter
  • if consteval
  • multidimensional subscript operator; this operator may be defined with any number of parameters (or even be variadic), allowing for defining a[i, j, k] = x; instead of a[i][j][k] = x;
  • static operator() and operator[] functions, and static lambdas
  • simplifying implicit move
  • auto(x) and auto{x}
  • new preprocessor directives:
    • #elifdef and #elifndef
    • #warning
  • extending the lifetime of temporaries within the range-initializer of a range-based for loop to the lifetime of the loop
  • new standard attribute [[assume(expression)]]
  • class template argument deduction from inherited constructors
  • labels at the end of compound statements
  • alias declarations in init-statements
  • integer-literal suffixes z for the corresponding signed integer type and uz or zu for std::size_t (for example, 0z and 15zu)
  • extended floating-point types with literals (conditionally supported)
  • optional () from nullary lambda expressions
  • attributes on lambda expressions
  • constexpr changes:
    • non-literal variables, labels, and gotos in constexpr functions
    • allowing static and thread_local variables that are usable in constant expressions in constexpr functions
    • relaxing restrictions on constexpr functions, including permitting a function to be declared constexpr even if no invocation satisfies the requirements for a core constant expression
  • narrowing contextual conversions to bool in static_assert and if constexpr
  • trimming whitespaces before line splicing
  • requiring declaration-order layout for non-static data members, subject to the rules for potentially overlapping subobjects
  • delimited escape sequences
  • named universal character escapes
  • text encoding changes:
    • support for UTF-8 as a portable source file encoding
    • consistent character literal encoding
    • character sets and encodings

Library

Standard Library Module Support

  • standard library modules std and std.compat

Coroutine Library Support

  • synchronous coroutine generator std::generator<Ref, V, Allocator> for ranges

General Utilities Support

  • result type std::expected<T, E>
  • monadic operations for std::optional<T> and std::expected
  • utility function std::to_underlying to get the underlying value of enum
  • move-only callable wrapper std::move_only_function
  • std::forward_like
  • std::invoke_r
  • std::bind_back
  • std::byteswap
  • std::unreachable: a function to mark unreachable code
  • made std::tuple compatible with other tuple-like objects
  • std::basic_common_reference specialization for std::reference_wrapper yielding reference types
  • adding default template arguments for std::pair<T, U>'s forwarding constructor

Compile-time Support

  • constexpr support for:
    • std::type_info::operator==
    • std::bitset
    • std::unique_ptr
    • for some <cmath> functions
    • for integral overloads of std::to_chars and std::from_chars
  • metaprogramming utilities:
    • type traits std::is_scoped_enum, std::is_implicit_lifetime, std::reference_constructs_from_temporary, and std::reference_converts_from_temporary.
  • adding move-only types support for comparison concepts

Iterators, Ranges, and Algorithm Support

  • range conversion utility std::ranges::to
  • new constrained ranges algorithms:
    • std::ranges::starts_with
    • std::ranges::ends_with
    • std::ranges::contains
    • std::ranges::contains_subrange
    • std::ranges::find_last and other variants
    • rangified versions of iota, shift_left, and shift_right
    • range fold algorithms
  • new std::ranges::range_adaptor_closure, a helper for defining user-defined range adaptor closures
  • new range adaptors:
    • the std::views::zip family, including zip_transform
    • the std::views::adjacent family, including adjacent_transform
    • std::views::join_with
    • std::views::slide
    • std::views::chunk
    • std::views::chunk_by
    • std::views::as_rvalue
    • std::views::as_const
    • std::views::repeat
    • std::views::stride
    • std::views::cartesian_product
    • std::views::enumerate
  • 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)
  • ranges iterators as inputs to non-ranges algorithms
  • relaxing range adaptors to allow for move only types
  • making multi-param constructors of some views explicit

Memory Management Support

  • std::out_ptr and std::inout_ptr for C interoperability
  • std::allocator_traits<Alloc>::allocate_at_least and std::allocator<T>::allocate_at_least
  • explicit lifetime management function std::start_lifetime_as for implicit-lifetime types
  • disallowing user specialization of std::allocator_traits

String and Text Processing Support

  • new member functions and changes in string types:
    • std::basic_string_view::contains and std::basic_string::contains
    • disabling construction from nullptr for std::basic_string and std::basic_string_view
    • explicit range constructor for std::basic_string_view
    • std::basic_string::resize_and_overwrite
    • rvalue-qualified overload of std::basic_string::substr, which can reuse storage when called on an rvalue string
  • formatting ranges and tuples, escaped presentation of characters and strings, and formatting of std::thread::id and stacktraces.

Diagnostic Support

  • stacktrace library, header <stacktrace> and type std::stacktrace

I/O Support

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

Containers Support

  • multidimensional-span std::mdspan
  • constructability and assignability of containers from other compatible ranges
  • flat associative-container adaptors: std::flat_map, std::flat_multimap, std::flat_set and std::flat_multiset
  • non-deduction context for allocators in container deduction guides
  • heterogeneous erasure overloads for associative containers
  • allowing iterator pair construction in stack and queue
  • requiring std::span and std::basic_string_view to be trivially copyable

C-Compatibility Support

  • new header <stdatomic.h>

Language defect reports

  • C++ identifier syntax using Unicode Standard Annex 31
  • allowing duplicate attributes
  • changing scope of lambda trailing return type
  • making the effects of rewritten comparison candidates less disruptive to existing code
  • undeprecating volatile compound assignments
  • fixing some compatibility and portability issues involving char8_t and UTF-8 string literals
  • relaxing requirements on wchar_t to match existing practices
  • relaxing restrictions on using certain pointers and references of unknown origin in constant expressions
  • introducing immediate-escalating functions, which can become immediate functions under specified conditions
  • allowing static_assert(false) in uninstantiated template contexts

Library defect reports

  • changes in ranges library:
    • conditionally borrowed ranges
    • repairing input range adaptors and std::counted_iterator
    • relaxing the constraint on std::ranges::join_view
    • renamed std::ranges::split_view to std::ranges::lazy_split_view and new split_view
    • removed std::default_initializable constraint from concept std::ranges::view
    • view with ownership and new std::ranges::owning_view
    • fixed std::ranges::istream_view
  • changes in text formatting library:
    • std::basic_format_string
    • compile-time format string checks
    • reducing binary code size of std::format_to
    • fixing locale handling in chrono formatters
    • improving width estimation and fill character allowances of std::format
    • use of forwarding references in format arguments to allow non-const-formattable types
  • fully constexpr std::variant and std::optional
  • supporting types derived from std::variant in std::visit

Removed features and deprecation

Removed features:

  • Removed the language and standard-library provisions for garbage-collection support and reachability-based leak detection, including the strict pointer-safety interface. This removes those facilities from the C++ standard but does not prevent C++ programs from using separate garbage-collection libraries.
  • Mixed wide-string literal concatenation.
  • Non-encodable wide character literals and multicharacter wide character literals.

Deprecated features:

  • std::aligned_storage and std::aligned_union
  • std::float_denorm_style, std::numeric_limits<T>::has_denorm and std::numeric_limits<T>::has_denorm_loss

Reverted deprecations:

  • The use of the comma operator in subscript expressions is no longer deprecated. C++23 also changes the rules for overloaded operator[] so that it can take multiple parameters.
  • The corresponding C-compatibility headers with .h suffixes are no longer deprecated, although their use is discouraged in C++-only code where C interoperability is not needed.

The Concurrency Technical Specification, second edition, was published separately as ISO/IEC TS 9922:2024. It specifies an interface through which C++ programs can invoke algorithms with concurrent execution; it is a separate technical specification, not part of ISO/IEC 14882:2024.

Compiler support

Support for C++23 varies by compiler version and by language and standard-library feature; enabling a C++23 language mode does not imply complete implementation of the standard.

History

In February 2020, at the final meeting for C++20 in Prague, WG21 discussed an early overall plan for C++23: The roadmap proposed library support for coroutines, a modular standard library, executors, and networking. This was an early plan rather than a guarantee that all proposals would be included; executors and networking were not included in the final C++23 standard.

The planned in-person WG21 meeting in Varna in June 2020 was cancelled because of the COVID-19 pandemic, and the committee shifted to remote meetings and work. The planned in-person meetings in New York and Kona, Hawaii were also replaced by virtual meetings. WG21 meetings remained virtual until November 2022; the November 2022 and February 2023 meetings were hybrid. The standard was technically finalized by WG21 at the hybrid meeting in Issaquah in February 2023.

WG21 used straw polls during virtual meetings to gauge consensus on proposed changes. The meeting-by-meeting summaries below identify proposals or defect resolutions that received positive straw polls; a straw poll was not itself final ISO publication approval.

November 2020

The WG21 minutes record positive straw polls on the following items at the virtual meeting of 9 November 2020:

  • 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>)
  • A type trait std::is_scoped_enum
  • The header <stdatomic.h>, for interoperability with C atomics

February 2021

The WG21 minutes record positive straw polls on the following items at the virtual meeting of 22 February 2021:

  • Removing unnecessary empty parameter list () from lambda expressions.
  • Repairing input range adaptors and counted_iterator.
  • Relax the requirements for time_point::clock.
  • std::visit for classes that are derived from std::variant.
  • Clarified the requirements for lockable objects used by the standard threading library.
  • Conditionally borrowed ranges.
  • std::to_underlying.

June 2021

The WG21 minutes record positive straw polls on the following feature proposals and defect resolutions at the virtual meeting in June 2021:

  • 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).
  • Selected changes to 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 template arguments for std::pair's forwarding constructor.

October 2021

The WG21 minutes record positive straw polls on the following feature proposals and defect resolutions at the virtual meeting in October 2021:

  • 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 preprocessing directives: #elifdef and #elifndef. Both directives were added to C23 (C language update) and GCC 12.
  • 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.
  • Added the std::pmr::stacktrace alias for std::basic_stacktrace<std::pmr::polymorphic_allocator<std::stacktrace_entry>>.
  • 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.
  • Revamped specification and use of integer-class types.
  • Clarified that the C-compatibility headers remain supported and are no longer deprecated, while their use is discouraged in C++-only code that does not need C interoperability.

February 2022

The WG21 minutes record positive straw polls on the following proposals at the virtual meeting of 7 February 2022:

  • 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

The WG21 minutes record positive straw polls on the following proposals and defect resolutions at the virtual meeting of 25 July 2022:

  • 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.
  • Added named universal character escapes, which allow Unicode characters to be referred to by name. For example, U'\N{LATIN CAPITAL LETTER A WITH MACRON}' is equivalent to U'\u0100'.
  • Allowed operator() and lambdas to be static.
  • Relaxed restrictions on using pointers and references of unknown origin in constant expressions.
  • Allowed implementations to support extended floating-point types in addition to the three standard floating-point types. Where supported, the optional header <stdfloat> provides aliases such as std::float16_t, std::float32_t, std::float64_t, std::float128_t and std::bfloat16_t, with corresponding literal suffixes such as f16, f32, f64, f128 and bf16 (and uppercase forms), as well as relevant standard-library overloads.
  • Added the [[assume(expression)]] attribute, which lets an implementation assume that the expression is true for optimization purposes; it is not a run-time assertion.
  • Required implementations to support UTF-8 encoded source files as a portable source encoding.
  • Allowed arrays of char and unsigned char to be initialized from UTF-8 string literals, as a compatibility measure for char8_t.
  • Relaxed the requirement for wchar_t to represent all members of the extended character set, accommodating implementations in which wide characters use UTF-16.
  • Added std::mdspan, a multidimensional array view analogous to std::span.
  • The flat associative-container adaptors std::flat_map, std::flat_multimap, std::flat_set and std::flat_multiset were added to the standard library.
  • Added std::print and std::println for formatted output, including output to standard output.
  • Added 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.
  • Added an rvalue-qualified std::basic_string::substr() && overload, allowing substring extraction from an rvalue string to reuse its storage where applicable.
  • Added std::generator, 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.
  • Added explicit lifetime-management functions 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.
  • Allowing ranges iterators to be used as inputs to non-ranges algorithms.
  • Relaxing range adaptors to allow for move-only types.

November 2022

The WG21 minutes record positive straw polls on the following proposals and defect resolutions at the hybrid meeting of 7 November 2022:

  • 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 operations for std::expected.
  • Synchronize the output of std::print with the underlying stream if the native Unicode API is used.

February 2023

The WG21 minutes record positive straw polls on the following proposals and defect resolutions at the final hybrid meeting of 6–11 February 2023:

  • Referencing the Unicode Standard.
  • Adjusted the ranges library to account for stashing iterators when flattening nested ranges.
  • std::views::enumerate, a range adaptor that yields elements together with their indices.
  • making multi-parameter constructors of some views explicit
  • relaxing constraints on some range adaptors
  • escaping improvements in std::format.
  • improving std::format's width estimation
  • changing fill-character allowances in std::format
  • formatting std::thread::id and stacktraces
  • a type trait std::is_implicit_lifetime
  • ensuring std::common_reference_t involving std::reference_wrapper can be a reference type
  • disallowing user specialization of std::allocator_traits
  • the polymorphic-allocator alias std::pmr::generator
  • deprecating std::float_denorm_style, std::numeric_limits<T>::has_denorm and std::numeric_limits<T>::has_denorm_loss
  • std::barrier's phase-completion guarantees, including changes to which thread may execute the completion step.

See also

References

  1. ↑ "ISO/IEC 14882:2024 — Programming languages — C++". ISO. Retrieved 2026-10-27.
  2. ↑ "Working Draft, Standard for Programming Language C++" (PDF). WG21. ISO/IEC. 2023-05-10.
  3. ↑ "N4951 Editors' Report: Programming Languages — C++". WG21. 2023-05-10.
  4. 1 2 "C++23 "Pandemic Edition" is complete (Trip report: Winter ISO C++ standards meeting, Issaquah, WA, USA)". herbsutter.com. 13 February 2023.
  5. ↑ "ISO/IEC DIS 14882 — Programming languages — C++". ISO. Retrieved 2026-10-27.
  6. 1 2 "C++ Support in Clang". LLVM Project. Retrieved 2026-10-27.
  7. 1 2 "C++ Standards Support in GCC". GNU Project. Retrieved 2026-10-27.
  8. 1 2 "Microsoft C/C++ language conformance by Visual Studio version". Microsoft Learn. Retrieved 2026-10-27.
  9. 1 2 "Compiler support for C++23". cppreference.com. Retrieved 2026-10-27.
  10. ↑ "C++23". cppreference.com. Retrieved 2026-10-27.
  11. ↑ Gašper Ažman; Sy Brand; Ben Deane; Barry Revzin (2021-07-12). "Deducing this".
  12. ↑ Barry Revzin; Richard Smith; Andrew Sutton; Daveed Vandevoorde (2021-03-22). "if consteval".
  13. ↑ Mark Hoemmen; Daisy Hollman; Corentin Jabot; Isabella Muerte; Christian Trott (2021-09-14). "Multidimensional subscript operator" (PDF).
  14. ↑ "static operator()". 2022-04-08.
  15. ↑ "static operator[]" (PDF). 2022-11-11.
  16. ↑ "Simpler implicit move". 2022-03-23.
  17. ↑ Zhihao Yuan (2021-07-12). "auto(x): decay-copy in the language".
  18. ↑ Melanie Blower (2021-04-30). "Add support for preprocessing directives elifdef and elifndef" (PDF).
  19. ↑ Aaron Ballman (2022-01-13). "Support for #warning" (PDF).
  20. ↑ "Wording for P2644R1 Fix for Range-based for Loop". 2022-11-11.
  21. ↑ "Portable assumptions" (PDF). 2022-04-22.
  22. ↑ Timur Doumler (2022-05-20). "Wording for class template argument deduction from inherited constructors" (PDF).
  23. ↑ "Labels at the end of compound statements (C compatibility)" (PDF). 2022-01-13.
  24. ↑ Jens Maurer (2021-04-13). "Extend init-statement to allow alias-declaration".
  25. ↑ JeanHeyd Meneide; Rein Halbersma (2019-11-24). "Literal Suffix for (signed) size_t".
  26. ↑ "Extended floating-point types and standard names". 2022-04-22.
  27. ↑ Alex Christensen; JF Bastien (2020-12-11). "P1102R2: Down with ()!".
  28. ↑ "Attributes on Lambda-Expressions" (PDF).
  29. ↑ Ville Voutilainen (2021-07-12). "Non-literal variables (and labels and gotos) in constexpr functions".
  30. ↑ "Permitting static constexpr variables in constexpr functions". 2022-11-07.
  31. ↑ "Relaxing some constexpr restrictions". 2022-01-27.
  32. ↑ Andrzej Krzemieński (2021-04-12). "Narrowing contextual conversions to bool".
  33. ↑ Corentin Jabot (2021-04-13). "Trimming whitespaces before line splicing" (PDF).
  34. ↑ Pal Balog (2021-04-02). "Make declaration order layout mandated" (PDF).
  35. ↑ "Delimited escape sequences" (PDF). 2022-02-25.
  36. ↑ "Named universal character escapes". 2022-03-25.
  37. ↑ "Support for UTF-8 as a portable source file encoding" (PDF). 2022-07-01.
  38. ↑ Corentin Jabot (2021-09-14). "Consistent character literal encoding" (PDF).
  39. ↑ Jens Maurer (2021-09-21). "Character sets and encodings".
  40. ↑ "Standard Library Modules std and std.compat" (PDF).
  41. ↑ "std::generator: Synchronous Coroutine Generator for Ranges" (PDF). WG21.
  42. ↑ Vicente Botet; JF Bastien; Jonathan Wakely (2022-01-07). "std::expected".
  43. ↑ Sy Brand (2021-07-06). "Monadic operations for std::optional".
  44. ↑ Jeff Garland (2022-09-28). "P2505R5 Monadic Functions for std::expected<T, E>".
  45. ↑ JeanHeyd Meneide (2021-01-22). "std::to_underlying for enumerations".
  46. ↑ Matt Calabrese; Ryan McDougall (2021-07-09). "move_only_function".
  47. ↑ Gašper Ažman (2022-05-13). "std::forward_like" (PDF).
  48. ↑ Zhihao Yuan (2020-04-29). "invoke_r".
  49. 1 2 Barry Revzin (2021-12-17). "Pipe support for user-defined range adaptors".
  50. ↑ Isabella Muerte; Corentin Jabot (2021-09-17). "Byteswapping for fun&&nuf".
  51. ↑ Melissa Mears; Jens Maurer (2021-10-15). "Function to mark unreachable code" (PDF).
  52. ↑ Corentin Jabot (2022-07-15). "Compatibility between tuple, pair and tuple-like objects" (PDF).
  53. ↑ Hui Xie; S. Levent Yilmaz; Tim Song (2023-02-07). "common_reference_t of reference_wrapper Should Be a Reference Type".
  54. ↑ "Default Template Arguments for pair's Forwarding Constructor". WG21. 2021-01-25.
  55. ↑ Peter Dimov (2021-05-01). "Making std::type_info::operator== constexpr".
  56. ↑ Daniil Goncharov (2022-06-25). "A more constexpr bitset" (PDF).
  57. ↑ Andreas Fertig (2021-11-06). "Making std::unique_ptr constexpr" (PDF).
  58. ↑ Edward J. Rosten; Oliver J. Rosten (2021-11-12). "constexpr for <cmath> and <cstdlib>" (PDF).
  59. ↑ Daniil Goncharov; Alexander Karaev (2021-09-18). "Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in <charconv> Header" (PDF).
  60. ↑ Juan Alday (2020-10-12). "A proposal for a type trait to detect scoped enumerations" (PDF).
  61. ↑ Timur Doumler; Vittorio Romeo (2022-11-11). "A trait for implicit lifetime types" (PDF).
  62. ↑ Tim Song (2021-10-13). "A type trait to detect reference binding to temporary".
  63. ↑ Justin Bassett (2022-07-02). "Move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with" (PDF).
  64. 1 2 Corentin Jabot; Eric Niebler; Casey Carter (2022-01-21). "Conversions from ranges to containers" (PDF).
  65. ↑ Christopher Di Bella (2021-02-19). "starts_with and ends_with".
  66. ↑ Christopher Di Bella. "std::ranges::contains".
  67. ↑ Zach Laine (2022-06-17). "find_last" (PDF).
  68. ↑ Tim Song (2021-12-05). "ranges::iota, ranges::shift_left, and ranges::shift_right".
  69. ↑ Barry Revzin (2022-04-22). "ranges::fold".
  70. ↑ Tim Song (2021-06-11). "zip".
  71. ↑ Barry Revzin (2022-01-28). "views::join_with".
  72. ↑ Tim Song (2021-12-05). "Windowing range adaptors: views::chunk and views::slide".
  73. ↑ Tim Song (2021-11-19). "views::chunk_by".
  74. ↑ Barry Revzin (2022-02-14). "views::as_rvalue".
  75. 1 2 Barry Revzin (2022-06-17). "cbegin should always return a constant iterator".
  76. ↑ Michał Dominiak (2022-07-13). "views::repeat".
  77. ↑ Christopher Di Bella; Tim Song (2022-07-08). "stride_view".
  78. ↑ Sy Brand; Michał Dominiak (2022-07-13). "views::cartesian_product".
  79. ↑ Corentin Jabot (2022-12-07). "views::enumerate" (PDF).
  80. ↑ David Olsen (2022-04-22). "Ranges iterators as inputs to non-Ranges algorithms".
  81. ↑ Michał Dominiak (2022-07-13). "Relaxing range adaptors to allow for move only types".
  82. ↑ Ville Voutilainen (2022-11-12). "Making multi-param constructors of views explicit".
  83. ↑ JeanHeyd Meneide; Todor Buyukliev; Isabella Muerte (2021-04-15). "out_ptr - a scalable output pointer abstraction".
  84. ↑ Jonathan Wakely; Chris Kennelly (2021-01-22). "Providing size feedback in the Allocator interface".
  85. ↑ Timur Doumler; Richard Smith (2022-07-15). "Explicit lifetime management" (PDF).
  86. ↑ Pablo Halpern (2023-02-08). "Disallow User Specialization of allocator_traits".
  87. ↑ Wim Leflere; Paul Fee (2020-06-13). "string contains function".
  88. ↑ Yuriy Chernyshov (2020-09-06). "A Proposal to Prohibit std::basic_string and std::basic_string_view construction from nullptr".
  89. ↑ Corentin Jabot (2021-03-17). "Range constructor forstd::string_view 2: Constrain Harder" (PDF).
  90. ↑ Chris Kennelly; Mark Zeren (2021-09-14). "basic_string::resize_and_overwrite".
  91. ↑ "std::string::substr() &&".
  92. ↑ "Formatting Ranges". WG21. 2022-05-16.
  93. ↑ Barry Revzin (2022-07-15). "Improve default container formatting". WG21.
  94. ↑ Victor Zverovich (2022-11-30). "Escaping improvements in std::format". WG21.
  95. ↑ Corentin Jabot; Victor Zverovich (2023-02-09). "Formatting thread::id and stacktrace" (PDF). WG21.
  96. ↑ Alexey Gorgurov; Antony Polukhin (2020-09-16). "A Proposal to add stacktrace library".
  97. ↑ "Formatted output".
  98. ↑ Peter Sommerlad (2021-02-26). "A strstream replacement using span<charT> as buffer" (PDF).
  99. ↑ "Support exclusive mode for fstreams".
  100. ↑ Bryce Adelstein Lelbach (2021-09-25). "Printing volatile Pointers".
  101. ↑ "MDSPAN". 13 July 2022.
  102. ↑ "index_type & size_type in mdspan" (PDF).
  103. ↑ "mdspan: rename pointer and contiguous". 15 June 2022.
  104. ↑ "Add the missing empty to mdspan".
  105. ↑ "A Standard flat_map" (PDF). WG21.
  106. ↑ "A Standard flat_set" (PDF). WG21.
  107. ↑ Arthur O'Dwyer; Mike Spertus (2021-03-14). "Stop overconstraining allocators in container deduction guides".
  108. ↑ Konstantin Boyarinov; Sergey Vinogradov; Ruslan Arutyunyan (2020-12-15). "Heterogeneous erasure overloads for associative containers".
  109. ↑ Corentin Jabot (2021-03-05). "Iterators pair constructors for stack and queue" (PDF).
  110. ↑ Nevin Liber (2021-03-19). "Require span & basic_string_view to be TriviallyCopyable" (PDF).
  111. ↑ Hans-J. Boehm (2020-10-23). "P0943R6: Support C atomics in C++".
  112. ↑ Steve Downey; Zach Laine; Tom Honermann; Peter Bindels; Jens Maurer (2021-04-12). "C++ Identifier Syntax using Unicode Standard Annex 31".
  113. ↑ Erich Keane (2020-07-02). "Allow Duplicate Attributes" (PDF).
  114. ↑ Barry Revzin (2021-09-14). "Change scope of lambda trailing-return-type".
  115. ↑ "The Equality Operator You Are Looking For". 2022-01-13.
  116. ↑ "De-deprecating volatile compound operations" (PDF).
  117. ↑ "Core Language Working Group NB comment resolutions for the November, 2022 meeting : 2654. Un-deprecation of compound volatile assignments".
  118. ↑ "char8_t Compatibility and Portability Fix". WG21. 2022-06-17.
  119. ↑ "Relax requirements on wchar_t to match existing practices" (PDF). 2022-07-15.
  120. ↑ "Using unknown pointers and references in constant expressions". 8 April 2022.
  121. ↑ "consteval needs to propagate up". 2022-11-11.
  122. ↑ Barry Revzin (2022-11-08). "Allowing static_assert(false)".
  123. ↑ Barry Revzin (2020-02-19). "Conditionally borrowed ranges".
  124. ↑ Tim Song (2021-01-12). "Repairing input range adaptors and counted_iterator".
  125. ↑ Tim Song (2021-05-06). "join_view should join all views of ranges".
  126. ↑ Barry Revzin (2021-03-05). "Superior String Splitting".
  127. ↑ Barry Revzin (2021-05-14). "Views should not be required to be default constructible".
  128. ↑ Barry Revzin; Tim Song (2021-08-15). "What is a view?".
  129. ↑ Nicolai Josuttis (2021-09-24). "Fix istream_view" (PDF).
  130. ↑ Barry Revzin (2022-01-18). "Expose std::basic-format-string<charT, Args...>".
  131. ↑ Victor Zverovich (2021-02-05). "std::format improvements".
  132. ↑ Victor Zverovich; Corentin Jabot (2021-09-11). "Fixing locale handling in chrono formatters".
  133. ↑ Corentin Jabot (2022-12-02). "format's width estimation is too approximate and not forward compatible" (PDF).
  134. ↑ Tom Honermann (2023-02-08). "std::format() fill character allowances".
  135. ↑ Victor Zverovich (2021-09-24). "Add support for std::generator-like types to std::format".
  136. ↑ Barry Revzin (2021-02-11). "Missing constexpr in std::optional and std::variant".
  137. ↑ Barry Revzin (2020-10-30). "Inheriting from std::variant".
  138. ↑ JF Bastien; Alisdair Meredith (2021-04-16). "Removing Garbage Collection Support". WG21.
  139. ↑ "std::pointer_safety". cppreference.com. Retrieved 2026-10-27.
  140. ↑ Jens Maurer (2021-04-12). "Mixed string literal concatenation".
  141. ↑ "Remove non-encodable wide character literals and multicharacter wide character literals" (PDF).
  142. ↑ CJ Johnson (2021-11-22). "Deprecate std::aligned_storage and std::aligned_union" (PDF).
  143. ↑ Matthias Kretz (2022-11-08). "Deprecate numeric_limits::has_denorm" (PDF). WG21.
  144. ↑ Thomas Köppe (2021-06-11). "Clarifying the status of the C headers". WG21.
  145. ↑ "ISO/IEC TS 9922:2024 — Programming Languages — Technical specification for C++ extensions for concurrency 2". ISO. Retrieved 2026-10-27.
  146. ↑ 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.
  147. ↑ 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.
  148. ↑ "N4951 Editors' Report: Programming Languages — C++". WG21. 2023-05-10.
  149. ↑ 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.
  150. 1 2 Sutter, Herb (29 July 2020). "Business Plan and Convener's Report: ISO/IEC JTC1/SC22/WG21 (C++)" (PDF).
  151. 1 2 "Upcoming Meetings, Past Meetings : Standard C++". isocpp.org.
  152. ↑ Ranns, Nina (2020-11-19). "WG21 2020-11 Virtual Meeting: Minutes of Meeting" (PDF).
  153. ↑ Ranns, Nina (2021-02-22). "WG21 2021-02 Virtual Meeting: Minutes of Meeting" (PDF).
  154. ↑ Alexey Dmitriev; Howard Hinnant (2020-10-22). "Relax Requirements for time_point::clock".
  155. ↑ Tim Song (2020-11-13). "Locks lock lockables". WG21.
  156. ↑ Ranns, Nina (2021-06-07). "WG21 2021-06 Virtual Meeting Minutes of Meeting" (PDF).
  157. ↑ "Default Template Arguments for pair's Forwarding Constructor". WG21. 2021-01-25.
  158. ↑ Ranns, Nina (2021-10-04). "WG21 2021-10 Virtual Meeting Minutes of Meeting" (PDF).
  159. ↑ "GCC 12 Adds Support For New #elifdef #elifndef Directives". phoronix. May 12, 2021. Archived from the original on December 27, 2022.
  160. ↑ Steve Downey (2021-06-14). "Add a pmr alias for std::stacktrace".
  161. ↑ Giuseppe D'Angelo (2021-06-28). "Add a conditional noexcept specification to std::exchange".
  162. ↑ Tim Song (2021-08-06). "Cleaning up integer-class types".
  163. ↑ Thomas Köppe (2021-06-11). "Clarifying the status of the "C headers"".
  164. ↑ Ranns, Nina (2022-02-07). "WG21 2022-02 Virtual Meeting: Minutes of Meeting" (PDF).
  165. ↑ Ranns, Nina (2022-08-09). "WG21 2022-07 Virtual Meeting: Minutes of Meeting" (PDF).
  166. ↑ "Named universal character escapes". WG21. 2022-03-25.
  167. ↑ "Extended floating-point types and standard names". WG21. 2022-04-22.
  168. ↑ "Support for UTF-8 as a portable source file encoding" (PDF). WG21. 2022-07-01.
  169. ↑ "char8_t Compatibility and Portability Fix". WG21. 2022-06-17.
  170. ↑ "Relax requirements on wchar_t to match existing practices" (PDF). WG21. 2022-07-15.
  171. ↑ "A Standard flat_map" (PDF). WG21.
  172. ↑ "A Standard flat_set" (PDF). WG21.
  173. ↑ Ranns, Nina (2022-12-05). "WG21 2022-11 Hybrid Meeting: Minutes of Meeting" (PDF).
  174. ↑ Victor Zverovich (2022-11-08). "Should the output of std::print to a terminal be synchronized with the underlying stream?".
  175. ↑ Ranns, Nina (2023-03-06). "WG21 2023-02 Hybrid Meeting: Minutes of Meeting" (PDF).
  176. ↑ Corentin Jabot (2023-02-09). "Referencing The Unicode Standard" (PDF).
  177. ↑ Tim Song (2023-01-31). "Stashing stashing iterators for proper flattening".
  178. ↑ "views::enumerate" (PDF). WG21. 2022-12-07.
  179. ↑ "Relaxing Ranges Just a Smidge". WG21.
  180. ↑ Victor Zverovich (2022-11-30). "Escaping improvements in std::format". WG21.
  181. ↑ "format's width estimation is too approximate and not forward compatible" (PDF). WG21. 2022-12-02.
  182. ↑ "std::format() fill character allowances". WG21. 2023-02-08.
  183. ↑ "Formatting thread::id and stacktrace" (PDF). WG21. 2023-02-09.
  184. ↑ "A trait for implicit lifetime types" (PDF). WG21. 2022-11-11.
  185. ↑ "common_reference_t of reference_wrapper Should Be a Reference Type". WG21. 2023-02-07.
  186. ↑ "Disallow User Specialization of allocator_traits". WG21. 2023-02-08.
  187. ↑ "Working Draft, Standard for Programming Language C++" (PDF). WG21. 2023-05-10.
  188. ↑ "barrier's phase completion guarantees". WG21. 2023-02-09.