C++23
C++23, formally ISO/IEC 14882:2024,[1] is the current open standard for the C++ programming language that follows C++20. The final draft of this version is N4950.[2][3]
In February 2020, at the final meeting for C++20 in Prague, an overall plan for C++23 was adopted:[4][5] 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,[6][7] as was the November 2020 meeting in New York[8][7] and the February 2021 meeting in Kona, Hawaii.[8] All meetings until November 2022 were virtual while the November 2022 meeting until the final meeting in February 2023 was hybrid.[8] The standard was technically finalized by WG21 at the hybrid meeting in Issaquah in February 2023.[9]
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
thisobject parameter[10] if consteval[11]- multidimensional subscript operator[12]
- static call and subscript operators and static lambdas[13][14]
- simplifying implicit move[15]
auto(x)andauto{x}[16]- new preprocessor directives:
- extending the lifetime of some temporaries in range-based for loop[19]
- new standard attribute
assume(expression)[20] - class template argument deduction from inherited constructors[21]
- labels at the end of the compound statement[22]
- alias declarations in init-statements[23]
- literal suffixes for
std::size_tand the corresponding signed type[24] - extended floating-point types with literals (conditionally supported)[25]
- optional
()from nullary lambda expressions[26] - attributes on lambda expressions[27]
constexprchanges:- non-literal variables, labels, and
gotos inconstexprfunctions[28] - allowing
staticandthread_localvariables that are usable in constant expressions inconstexprfunctions[29] constexprfunction does not need its return type and parameter types to be literal type- it is now possible to write a
constexprfunction for which no invocation satisfies the requirements of a core constant expression[30]
- non-literal variables, labels, and
- narrowing contextual conversions to
boolinstatic_assertandif constexpr[31] - trimming whitespaces before line splicing[32]
- make declaration order layout mandated[33]
- delimited escape sequences[34]
- named universal character escapes[35]
- text encoding changes:
Library
Standard Library Module Support
Coroutine Library Support
- synchronous coroutine
std::generatorfor ranges[40]
General Utilities Support
- result type
std::expected[41] - monadic operations for
std::optional[42] andstd::expected[43] - utility function
std::to_underlyingto get the underlying value of enum[44] - move-only callable wrapper
std::move_only_function[45] std::forward_like[46]std::invoke_r[47]std::bind_back[48]std::byteswap[49]std::unreachable: a function to mark unreachable code[50]- made
std::tuplecompatible with other tuple-like objects[51] std::basic_common_referencespecialization forstd::reference_wrapperyielding reference types[52]- adding default arguments for
std::pair's forwarding constructor[53]
Compile-time Support
constexprsupport for:- metaprogramming utilities:
- adding move-only types support for comparison concepts[62]
Iterators, Ranges, and Algorithm Support
- new range conversion function
std::ranges::to[63] - new constrained ranges algorithm:
- new
std::ranges::range_adaptor_closure, a helper for defining user-defined range adaptor closures[48] - new range adaptors:
std::views::zipand other variantsstd::views::adjacentand other variants[69]std::views::join_with[70]std::views::slidestd::views::chunk[71]std::views::chunk_by[72]std::views::as_rvalue[73]std::views::as_const[74]std::views::repeat[75]std::views::stride[76]std::views::cartesian_product[77]std::views::enumerate[78]
- rectifying constant iterators, sentinels, and ranges, that is,
std::ranges::cbeginand other similar utilities returning constant iterators should be fully guaranteed even for shallow-const views (such asstd::span)[74] - ranges iterators as inputs to non-ranges algorithms[79]
- relaxing range adaptors to allow for move only types[80]
- making multi-param constructors of some views
explicit[81]
Memory Management Support
std::out_ptrandstd::inout_ptrfor C interoperability[82]std::allocate_at_leastandstd::allocator::allocate_at_least[83]- explicit lifetime management function
std::start_lifetime_asfor implicit-lifetime types[84] - disallowing user specialization of
std::allocator_traits[85]
String and Text Processing Support
- new member functions and changes in string types:
std::basic_string_view::containsandstd::basic_string::contains[86]- disabling construction from
nullptrforstd::basic_stringandstd::basic_string_view[87] - explicit range constructor for
std::basic_string_view[88] std::basic_string::resize_and_overwrite[89]- rvalue reference overload of
std::basic_string::substrfor efficient slicing[90]
- formatting ranges, tuples, escaped presentation of characters and strings,
std::thread::id, and stacktraces.[91][92][93]
Diagnostic Support
- stacktrace library[94]
I/O Support
- formatted output functions
std::printandstd::printlnfrom new header<print>[95] - spanstream library (
std::span-based string stream) from new header<spanstream>[96] - a support for exclusive mode in
std::fstreams[97] std::basic_ostream::operator<<(const volatile void*)[98]
Containers Support
- multidimensional-span
std::mdspan[99][100][101][102] - constructability and assignability of containers from other compatible ranges[63]
- flat set and flat map container adapters[103][104]
- non-deduction context for allocators in container deduction guides[105]
- heterogeneous erasure overloads for associative containers[106]
- allowing iterator pair construction in stack and queue[107]
- requiring
std::spanandstd::basic_string_viewto be trivially copyable[108]
C-Compatibility Support
- new header
<stdatomic.h>[109]
Language defect reports
- C++ identifier syntax using Unicode Standard Annex 31[110]
- allowing duplicate attributes[111]
- changing scope of lambda trailing return type[112]
- making overloaded comparison operators less breaking change[113]
- undeprecating volatile compound assignments[114][115]
- fixing the compatibility and portability of
char8_t[116] - relaxing requirements on
wchar_tto match existing practices[117] - allowing some pointers and references of
thisor unknown origin in constant expressions[118] - introduction of immediate-escalating functions promoted to immediate functions[119]
- allowing
static_assert(false)in uninstantiated template contexts
Library defect reports
- changes in ranges library:
- conditionally borrowed ranges[120]
- repairing input range adaptors and
std::counted_iterator[121] - relaxing the constraint on
std::ranges::join_view[122] - renamed
std::ranges::split_viewtostd::ranges::lazy_split_viewand newsplit_view[123] - removed
std::default_initializableconstraint from conceptstd::ranges::view[124] - view with ownership and new
std::ranges::owning_view[125] - fixed
std::ranges::istream_view[126]
- changes in text formatting library:
std::basic_format_string[127]- compile-time format string checks
- reducing binary code size of
std::format_to[128] - fixing locale handling in chrono formatters[129]
- improving width estimation[130] and fill character allowances of
std::format[131] - use of forwarding references in format arguments to allow non-const-formattable types[132]
- fully
constexprstd::variantandstd::optional[133] - supporting types derived from
std::variantinstd::visit[134]
Removed features and deprecation
Removed features:
- Garbage Collection Support and (strict) Pointer Safety[135] (meaning only relaxed pointer safety is to be relied upon[136]). 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.[137] 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.[138]
- Non-encodable wide character literals and multicharacter wide character literals.[139]
Deprecated features:
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 v2[142]
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.[143] - GCC added partial, experimental C++23 support in 2021 in version 11 through the option
-std=c++2bor-std=c++23It also has an option to enable GNU extensions in addition to the experimental C++23 support,-std=gnu++2b.[144]
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.
The following were added after the virtual WG21 meeting of 9 November 2020, where they were approved by straw polls:[145]
- Literal suffixes for
std::size tand the corresponding signed type - A member function
containsforstd::basic_stringandstd::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
After the virtual WG21 meeting of 22 February 2021, following features are added where they were approved by straw polls:[146]
- Removing unnecessary empty parameter list
()from lambda expressions. - Repairing input range adaptors and
counted_iterator. - Relax the requirements for
time_point::clock.[147] std::visitfor classes that are derived fromstd::variant.- Locks lock lockables.[148]
- Conditionally borrowed ranges.
std::to_underlying.
After the summer 2021 ISO C++ standards plenary virtual meeting of June 2021, new features and defect reports were approved by straw polls:[149]
- Consteval if (
if consteval). - Narrowing contextual conversions to
bool. - Allowing duplicate attributes.
std::span-based string-stream (<spanstream>).std::out_ptr()andstd::inout_ptr().constexprforstd::optional,std::variant, andstd::type_info::operator==.- Iterators pair constructors for
std::stack(stack) andstd::queue(queue). - Few changes of the ranges library:
- Generalized
starts_withandends_withfor arbitrary ranges. - Renamed
split_viewtolazy_split_viewand newsplit_view. - Relaxing the constraint on
join_view. - Removing
default_initializableconstraint from conceptview. - Range constructor for
std::basic_string_view.
- Generalized
- Prohibiting
std::basic_stringandstd::basic_string_viewconstruction fromnullptr. std::invoke_r.- Improvements on
std::format. - Adding default arguments for
std::pair's forwarding constructor.
After the autumn 2021 ISO C++ standards plenary virtual meeting of October 2021, new features and defect reports were approved by straw polls:[150]
- Non-literal variables, labels, and gotos in
constexprfunctions, but still ill-formed to evaluate them at compile-time. - Explicit
thisobject parameter. - Changes on character sets and encodings.
- New preprocessors:
#elifdefand#elifndef. Both directives were added to C23 (C language update) and GCC 12.[151] - Allowing alias declarations in init-statement.
- Overloading multidimensional subscript operator (e.g.
arr[1, 2]). - Decay copy in language:
auto(x)orauto{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::stacktracewhich is equivalent tostd::basic_stacktrace<std::pmr::polymorphic_allocator>.[152] - Changes in ranges library:
- Refined definition of a view.
- Replacing function template
std::ranges::istream_viewwith alias templatesstd::ranges::istream_view,std::ranges::wistream_view, and customization point objectstd::views::istream. ziprange adaptor family:zip_viewzip_transform_viewadjacent_view(andstd::views::pairwisebeing equivalent tostd::views::adjacent<2>)adjacent_transform_view(andstd::views::pairwise_transformbeing equivalent tostd::views::adjacent_transform<2>)
std::move_only_function.- Monadic operations for
std::optional. - Member function template
std::basic_string::resize_and_overwrite. - Printing
volatilepointers (volatile T*). std::byteswap.- Heterogeneous erasure overloads for associative containers.
- Every specialization of
std::spanandstd::basic_string_viewis trivially copyable. - Adding conditional
noexceptspecifications tostd::exchange.[153] - Revamped specification and use of integer-class types.[154]
- 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."[155]
After the virtual WG21 meeting of 7 February 2022, the following features are added where they were approved by straw polls:[156]
- Allowed attributes on the function call operator of a lambda
std::expectedconstexprforcmathandcstdlib- Function to mark unreachable code
ranges::to- A type trait to detect reference binding to temporary
- Making
std::unique_ptrconstexpr - Pipe support for user-defined range adaptors
ranges::iota,ranges::shift_leftandranges::shift_rightviews::join_with- Windowing range adaptors:
views::chunkandviews::slide views::chunk_by
After the virtual WG21 meeting of 25 July 2022, the following features and defect reports are added where they were approved by straw polls:[157]
- Made rewriting equality in expressions less of a breaking change.
- Reverted the deprecation of bitwise assignment to
volatilevariables. - Added the
#warningpreprocessor 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
constexprfunctions 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 bestatic. - Allowed the
thispointer 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 tfor these extended types accessible through the header<stdfloat>, their corresponding literal suffixesf16f32f64f128bf16orF16F32F64F128BF16and 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
charandunsigned charto be initialized with UTF-8 string literals. - Removed the requirement that
wchar_tcan 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 tostd::span. flat_mapandflat_setwere added to the standard library.- Added the
std::printandstd::printlnfunctions for printing formatted text to stdout. - Provide the named modules
stdandstd.compatfor importing the standard library. - Added support for exclusive mode
fstreams, analogous to the "x" flag infopen. - Allowed
std::formatto handle ranges, tuples, and other containers. - Added
std::forward_like. - Made
std::string::substruse move semantics. - Added
std::generatorwhich implements a coroutine generator that modelsstd::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::tuplecompatible with other tuple-like objects. - Explicit lifetime management for implicit-lifetime types.
- Made
std::bitsetand integral overloads ofstd::to_charsandstd::from_charsconstexpr-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.
After the hybrid WG21 meeting of 7 November 2022, the following features and defect reports are added where they were approved by straw polls:[158]
- Allowed
operator[]to bestatic. - Allowed
staticandthread_localvariables to appear inconstexprfunctions if they are usable in constant expressions. constevalpropagates upwards, that is, certain existingconstexprfunctions becomeconstevalfunctions 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
forloop to cover the entire loop. - Reverted the deprecation of (all, not just bitwise) compound assignment to
volatilevariables. - Monadic functions for
std::expected. - Synchronize the output of
std::printwith the underlying stream if the native Unicode API is used.[159]
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:[160]
- Referencing the Unicode Standard.[161]
- Stashing stashing iterators for proper flattening.[162]
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::formatfill character allowances- formatting
thread::idandstacktrace - A type trait
std::is_implicit_lifetime std::common_reference_tofstd::reference_wrappershould 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
External links
References
- ↑ "ISO/IEC 14882:2024 Programming languages — C++". https://www.iso.org/standard/83626.html.
- ↑ "Working Draft, Standard for Programming Language C++". ISO/IEC. 2023-05-10. https://open-std.org/JTC1/SC22/WG21/docs/papers/2023/n4950.pdf.
- ↑ "N4951 Editors' Report: Programming Languages - C++". 2023-05-10. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4951.html.
- ↑ Dusíková, Hana (2019-11-06). "N4817: 2020 Prague Meeting Invitation and Information". http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/n4817.pdf.
- ↑ Voutilainen, Ville (2019-11-25). "To boldly suggest an overall plan for C++23". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0592r4.html.
- ↑ Lelbach, Bryce Adelstein; Winters, Titus; Fracassi, Fabio; Baker, Billy; Liber, Nevin; Bastien, JF; Stone, David; Ballo, Botond et al. (2020-04-20). "P2145R0: Evolving C++ Remotely". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2145r0.html.
- ↑ 7.0 7.1 Sutter, Herb (29 July 2020). "Business Plan and Convener's Report: ISO/IEC JTC1/SC22/WG21 (C++)". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4862.pdf.
- ↑ 8.0 8.1 8.2 "Upcoming Meetings, Past Meetings : Standard C++". https://isocpp.org/std/meetings-and-participation/upcoming-meetings.
- ↑ "C++23 "Pandemic Edition" is complete (Trip report: Winter ISO C++ standards meeting, Issaquah, WA, USA)". 13 February 2023. https://herbsutter.com/2023/02/13/c23-pandemic-edition-is-complete-trip-report-winter-iso-c-standards-meeting-issaquah-wa-usa/.
- ↑ "Deducing this". 2021-07-12. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0847r7.html.
- ↑ "if consteval". 2021-03-22. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1938r3.html.
- ↑ "Multidimensional subscript operator". 2021-09-14. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2128r6.pdf.
- ↑ "static operator()". 2022-04-08. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1169r4.html.
- ↑ "static operator["]. 2022-11-11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2589r1.pdf.
- ↑ "Simpler implicit move". 2022-03-23. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2266r3.html.
- ↑ 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.
- ↑ Melanie Blower (2021-04-30). "Add support for preprocessing directives elifdef and elifndef". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2334r1.pdf.
- ↑ Aaron Ballman (2022-01-13). "Support for #warning". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2437r1.pdf.
- ↑ "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.
- ↑ "Portable assumptions". 2022-04-22. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1774r8.pdf.
- ↑ Timur Doumler (2022-05-20). "Wording for class template argument deduction from inherited constructors". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2582r1.pdf.
- ↑ "Labels at the end of compound statements (C compatibility)". 2022-01-13. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2324r2.pdf.
- ↑ 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.
- ↑ "Literal Suffix for (signed) size_t". 2019-11-24. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0330r8.html.
- ↑ "Extended floating-point types and standard names". 2022-04-22. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1467r9.html.
- ↑ Alex Christensen; JF Bastien (2020-12-11). "P1102R2: Down with ()!". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1102r2.html.
- ↑ "Attributes on Lambda-Expressions". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2173r1.pdf.
- ↑ 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.
- ↑ "Permitting
static constexprvariables inconstexprfunctions". 2022-11-07. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2647r1.html. - ↑ "Relaxing some constexpr restrictions". 2022-01-27. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2448r2.html.
- ↑ Andrzej Krzemieński (2021-04-12). "Narrowing contextual conversions to bool". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1401r5.html.
- ↑ Corentin Jabot (2021-04-13). "Trimming whitespaces before line splicing". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2223r2.pdf.
- ↑ "Make declaration order layout mandated". 2021-04-02. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1847r4.pdf.
- ↑ "Delimited escape sequences". 2022-02-25. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2290r3.pdf.
- ↑ "Named universal character escapes". 2022-03-25. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2071r2.html.
- ↑ "Support for UTF-8 as a portable source file encoding". 2022-07-01. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2295r6.pdf.
- ↑ Corentin Jabot (2021-09-14). "Consistent character literal encoding". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2316r2.pdf.
- ↑ Jens Maurer (2021-09-21). "Character sets and encodings". https://isocpp.org/files/papers/P2314R4.html.
- ↑ "Standard Library Modules std and std.compat". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2465r3.pdf.
- ↑ "(std::generator: Synchronous Coroutine Generator for Ranges)". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2502r2.pdf.
- ↑ "std::expected". 2022-01-07. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0323r12.html.
- ↑ Sy Brand (2021-04-27). "Monadic operations for std::optional". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0798r6.html.
- ↑ Jeff Garland (2022-09-28). "P2505R5 Monadic Functions for
std::expected". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2505r5.html. - ↑ JeanHeyd Meneide (2021-01-22). "std::to_underlying for enumerations". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1682r3.html.
- ↑ "move_only_function". 2021-07-09. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0288r9.html.
- ↑ Gašper Ažman (2022-05-13). "std::forward_like". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2445r1.pdf.
- ↑ Zhihao Yuan (2020-04-29). "invoke_r". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2136r3.html.
- ↑ 48.0 48.1 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.
- ↑ "Byteswapping for fun&&nuf". 2021-09-17. https://isocpp.org/files/papers/P1272R4.html.
- ↑ "Function to mark unreachable code". 2021-10-15. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0627r6.pdf.
- ↑ Corentin Jabot (2022-07-15). "Compatibility between tuple, pair and tuple-like objects". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2165r4.pdf.
- ↑ "common_reference_t of reference_wrapper Should Be a Reference Type". 2023-02-07. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2655r3.html.
- ↑ "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.
- ↑ Peter Dimov (2021-05-01). "Making std::type_info::operator== constexpr". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1328r1.html.
- ↑ Daniil Goncharov (2022-06-25). "A more constexpr bitset". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2417r2.pdf.
- ↑ Andreas Fertig (2021-11-06). "Making std::unique_ptr constexpr". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2273r3.pdf.
- ↑ "constexpr for <cmath> and <cstdlib>". 2021-11-12. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0533r9.pdf.
- ↑ "Add Constexpr Modifiers to Functions to_chars and from_chars for Integral Types in <charconv> Header". 2021-09-18. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2291r3.pdf.
- ↑ Juan Alday (2020-10-12). "A proposal for a type trait to detect scoped enumerations". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1048r1.pdf.
- ↑ "A trait for implicit lifetime types". 2022-11-11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2674r1.pdf.
- ↑ 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.
- ↑ Justin Bassett (2022-07-02). "Move-only types for equality_comparable_with, totally_ordered_with, and three_way_comparable_with". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2404r3.pdf.
- ↑ 63.0 63.1 "Conversions from ranges to containers". 2022-01-21. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1206r7.pdf.
- ↑ Christopher Di Bella (2021-02-19). "starts_with and ends_with". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1659r3.html.
- ↑ Christopher Di Bella (2021-04-16). "std::ranges::contains". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2302r4.html.
- ↑ Zach Laine (2022-06-17). "find_last". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1223r5.pdf.
- ↑ 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.
- ↑ Barry Revzin (2022-04-22). "ranges::fold". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2322r6.html.
- ↑ Tim Song (2021-06-11). "zip". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2321r2.html.
- ↑ Barry Revzin (2022-01-28). "views::join_with". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2441r2.html.
- ↑ 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.
- ↑ Tim Song (2021-11-19). "views::chunk_by". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2443r1.html.
- ↑ Barry Revzin (2022-02-14). "views::as_rvalue". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2446r2.html.
- ↑ 74.0 74.1 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.
- ↑ Michał Dominiak (2022-07-13). "views::repeat". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2474r2.html.
- ↑ "stride_view". 2022-07-08. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1899r3.html.
- ↑ "views::cartesian_product". 2022-07-13. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2374r4.html.
- ↑ Corentin Jabot (2022-12-07). "views::enumerate". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2164r9.pdf.
- ↑ 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.
- ↑ 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.
- ↑ 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.
- ↑ "out_ptr - a scalable output pointer abstraction". 2021-04-15. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1132r7.html.
- ↑ "Providing size feedback in the Allocator interface". 2021-01-22. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0401r6.html.
- ↑ "Explicit lifetime management". 2022-07-15. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2590r2.pdf.
- ↑ Pablo Halpern (2023-02-08). "Disallow User Specialization of allocator_traits". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2652r2.html.
- ↑ "string contains function". 2020-06-13. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1679r3.html.
- ↑ 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.
- ↑ Corentin Jabot (2021-03-17). "Range constructor forstd::string_view 2: Constrain Harder". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1989r2.pdf.
- ↑ "basic_string::resize_and_overwrite". 2021-09-14. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1072r10.html.
- ↑ "std::string::substr() &&". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2438r2.html.
- ↑ "Formatting Ranges". 16 May 2022. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2286r8.html.
- ↑ Barry Revzin (2022-07-15). "Improve default container formatting". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2585r1.html.
- ↑ "Formatting thread::id and stacktrace". 2023-02-09. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2693r1.pdf.
- ↑ "A Proposal to add stacktrace library". 2020-09-16. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0881r7.html.
- ↑ "Formatted output". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2093r14.html.
- ↑ Peter Sommerlad (2021-02-26). "A strstream replacement using span<charT> as buffer". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0448r4.pdf.
- ↑ "Support exclusive mode for fstreams". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2467r1.html.
- ↑ Bryce Adelstein Lelbach (2021-09-25). "Printing volatile Pointers". https://isocpp.org/files/papers/P1147R1.html.
- ↑ "MDSPAN". 13 July 2022. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html.
- ↑ "index_type & size_type in mdspan". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2599r2.pdf.
- ↑ "
mdspan: renamepointerandcontiguous". 15 June 2022. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2604r0.html. - ↑ "Add the missing
emptytomdspan". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2613r1.html. - ↑ "A Standard flat_map". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0429r9.pdf.
- ↑ "A Standard flat_set". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1222r4.pdf.
- ↑ "Stop overconstraining allocators in container deduction guides". 2021-03-14. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1518r2.html.
- ↑ "Heterogeneous erasure overloads for associative containers". 2020-12-15. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2077r2.html.
- ↑ Corentin Jabot (2021-03-05). "Iterators pair constructors for stack and queue". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1425r4.pdf.
- ↑ Nevin Liber (2021-03-19). "Require span & basic_string_view to be TriviallyCopyable". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2251r1.pdf.
- ↑ 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.
- ↑ "C++ Identifier Syntax using Unicode Standard Annex 31". 2021-04-12. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1949r7.html.
- ↑ Erich Keane (2020-07-02). "Allow Duplicate Attributes". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2156r1.pdf.
- ↑ 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.
- ↑ "The Equality Operator You Are Looking For". 2022-01-13. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2468r2.html.
- ↑ "De-deprecating volatile compound operations". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2327r1.pdf.
- ↑ "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.
- ↑ "
char8_tCompatibility and Portability Fix". 2022-06-17. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2513r3.html. - ↑ "Relax requirements on
wchar_tto match existing practices". 2022-07-15. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2460r2.pdf. - ↑ "Using unknown pointers and references in constant expressions". 8 April 2022. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2280r4.html.
- ↑ "
constevalneeds to propagate up". 2022-11-11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2564r3.html. - ↑ Barry Revzin (2020-02-19). "Conditionally borrowed ranges". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2017r1.html.
- ↑ 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.
- ↑ 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.
- ↑ Barry Revzin (2021-03-05). "Superior String Splitting". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2210r2.html.
- ↑ 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.
- ↑ "What is a view?". 2021-08-15. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2415r1.html.
- ↑ Nicolai Josuttis (2021-09-24). "Fix istream_view". https://isocpp.org/files/papers/P2432R1.pdf.
- ↑ Barry Revzin (2022-01-18). "Expose std::basic-format-string<charT, Args...>". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2508r1.html.
- ↑ Victor Zverovich (2021-02-05). "std::format improvements". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2216r3.html.
- ↑ "Fixing locale handling in chrono formatters". 2021-09-11. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2372r3.html.
- ↑ Corentin Jabot (2022-12-02). "format's width estimation is too approximate and not forward compatible". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2675r1.pdf.
- ↑ Tom Honermann (2023-02-08). "std::format() fill character allowances". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2572r1.html.
- ↑ Victor Zverovich (2021-09-24). "Add support for std::generator-like types to std::format". https://isocpp.org/files/papers/P2418R2.html.
- ↑ 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.
- ↑ Barry Revzin (2020-10-30). "Inheriting from std::variant". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2162r2.html.
- ↑ "std::pointer_safety - cppreference.com". https://en.cppreference.com/w/cpp/memory/gc/pointer_safety.
- ↑ "[basic.stc.dynamic.safety"]. https://timsong-cpp.github.io/cppwp/n4868/basic.stc.dynamic.safety#4.
- ↑ "Removing Garbage Collection Support". 2021-04-16. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2186r2.html.
- ↑ Jens Maurer (2021-04-12). "Mixed string literal concatenation". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2201r1.html.
- ↑ "Remove non-encodable wide character literals and multicharacter wide character literals". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2362r3.pdf.
- ↑ CJ Johnson (2021-11-22). "Deprecate std::aligned_storage and std::aligned_union". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1413r3.pdf.
- ↑ Matthias Kretz (2022-11-08). "Deprecate numeric_limits::has_denorm". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2614r2.pdf.
- ↑ "Programming Languages — Technical specification for C++ extensions for concurrency 2". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4956.pdf.
- ↑ "C++ Support in Clang". https://clang.llvm.org/cxx_status.html#cxx23.
- ↑ "C++ Standards Support in GCC - GNU Project". https://gcc.gnu.org/projects/cxx-status.html.
- ↑ Ranns, Nina (2020-11-19). "WG21 2020-11 Virtual Meeting: Minutes of Meeting". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4877.pdf.
- ↑ Ranns, Nina (2021-02-22). "WG21 2021-02 Virtual Meeting: Minutes of Meeting". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4877.pdf.
- ↑ "Relax Requirements for time_point::clock". 2020-10-22. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2212r2.html.
- ↑ Tim Song (2020-11-13). "Locks lock lockables". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2160r1.html.
- ↑ Ranns, Nina (2021-06-07). "WG21 2021-06 Virtual Meeting Minutes of Meeting". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/n4891.pdf.
- ↑ Ranns, Nina (2021-10-04). "WG21 2021-10 Virtual Meeting Minutes of Meeting". https://isocpp.org/files/papers/N4898.pdf.
- ↑ "GCC 12 Adds Support For New #elifdef #elifndef Directives". May 12, 2021. https://www.phoronix.com/news/GCC-12-elifdef-elifndef.
- ↑ 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.
- ↑ 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.
- ↑ Tim Song (2021-08-06). "Cleaning up integer-class types". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p2393r1.html.
- ↑ 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.
- ↑ Ranns, Nina (2022-02-07). "WG21 2022-02 Virtual Meeting: Minutes of Meeting". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4907.pdf.
- ↑ Ranns, Nina (2022-08-09). "WG21 2022-07 Virtual Meeting: Minutes of Meeting". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/n4916.pdf.
- ↑ Ranns, Nina (2022-12-05). "WG21 2022-11 Hybrid Meeting: Minutes of Meeting". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4933.pdf.
- ↑ 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.
- ↑ Ranns, Nina (2023-03-06). "WG21 2023-02 Hybrid Meeting: Minutes of Meeting". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/n4943.pdf.
- ↑ Corentin Jabot (2023-02-09). "Referencing The Unicode Standard". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2736r2.pdf.
- ↑ "Stashing stashing iterators for proper flattening". 2023-01-31. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2770r0.html.
