C++23
C++23 is the informal name for the next version of the ISO/IEC 14882 standard for the C++ programming language that will follow C++20. The final draft of this version is N4950.[1][2]
In February 2020, at the final meeting for C++20 in Prague, an overall plan for C++23 was adopted:[3][4] 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,[5][6] as was the November 2020 meeting in New York City [7][6] and the February 2021 meeting in Kona, Hawaii.[7] All meetings until November 2022 were virtual while the November 2022 meeting until the final meeting on February 2023 was hybrid.[7] The standard was technically finalized by WG21 at the hybrid meeting in Issaquah in February 2023.[8]
Modern "Hello, world" Example
After many library changes applied to the working draft, the new "Hello, world" program will be:
import std; int main() { std::println("Hello, world!"); }
Features
Changes that have been accepted into C++23 include:
Language
- explicit
this
object parameter[9] if consteval
[10]- multidimensional subscript operator[11]
- static call and subscript operators and static lambdas[12][13]
- simplifying implicit move[14]
auto(x)
andauto{x}
[15]- new preprocessor directives:
- extending the lifetime of some temporaries in range-based for loop[18]
- new standard attribute
assume(expression)
[19] - class template argument deduction from inherited constructors[20]
- labels at the end of the compound statement[21]
- alias declarations in init-statements[22]
- literal suffixes for
std::size_t
and the corresponding signed type[23] - extended floating-point types with literals (conditionally supported)[24]
- optional
()
from nullary lambda expressions[25] - attributes on lambda expressions[26]
constexpr
changes:- non-literal variables, labels, and
goto
s inconstexpr
functions[27] - allowing
static
andthread_local
variables that are usable in constant expressions inconstexpr
functions[28] 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 expression[29]
- non-literal variables, labels, and
- narrowing contextual conversions to
bool
instatic_assert
andif constexpr
[30] - trimming whitespaces before line splicing[31]
- make declaration order layout mandated[32]
- delimited escape sequences[33]
- named universal character escapes[34]
- text encoding changes:
Library
Standard Library Module Support
- standard library modules
std
andstd.compat
[38]
Coroutine Library Support
- synchronous coroutine
std::generator
for ranges[39]
General Utilities Support
- result type
std::expected
[40] - monadic operations for
std::optional
[41] andstd::expected
[42] - utility function
std::to_underlying
to get the underlying value of enum[43] - move-only callable wrapper
std::move_only_function
[44] std::forward_like
[45]std::invoke_r
[46]std::bind_back
[47]std::byteswap
[48]std::unreachable
: a function to mark unreachable code[49]- made
std::tuple
compatible with other tuple-like objects[50] std::basic_common_reference
specialization forstd::reference_wrapper
yielding reference types[51]- adding default arguments for
std::pair
's forwarding constructor[52]
Compile-time Support
constexpr
support for:- metaprogramming utilities:
- adding move-only types support for comparison concepts[61]
Iterators, Ranges, and Algorithm Support
- new range conversion function
std::ranges::to
[62] - new constrained ranges algorithm:
- new
std::ranges::range_adaptor_closure
, a helper for defining user-defined range adaptor closures[47] - new range adaptors:
std::views::zip
and other variantsstd::views::adjacent
and other variants[68]std::views::join_with
[69]std::views::slide
std::views::chunk
[70]std::views::chunk_by
[71]std::views::as_rvalue
[72]std::views::as_const
[73]std::views::repeat
[74]std::views::stride
[75]std::views::cartesian_product
[76]std::views::enumerate
[77]
- 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 asstd::span
)[73] - ranges iterators as inputs to non-ranges algorithms[78]
- relaxing range adaptors to allow for move only types[79]
- making multi-param constructors of some views
explicit
[80]
Memory Management Support
std::out_ptr
andstd::inout_ptr
for C interoperability[81]std::allocate_at_least
andstd::allocator::allocate_at_least
[82]- explicit lifetime management function
std::start_lifetime_as
for implicit-lifetime types[83] - disallowing user specialization of
std::allocator_traits
[84]
String and Text Processing Support
- new member functions and changes in string types:
std::basic_string_view::contains
andstd::basic_string::contains
[85]- disabling construction from
nullptr
forstd::basic_string
andstd::basic_string_view
[86] - explicit range constructor for
std::basic_string_view
[87] std::basic_string::resize_and_overwrite
[88]- rvalue reference overload of
std::basic_string::substr
for efficient slicing[89]
- formatting ranges, tuples, escaped presentation of characters and strings,
std::thread::id
, and stacktraces.[90][91][92]
Diagnostic Support
- stacktrace library[93]
I/O Support
- formatted output functions
std::print
andstd::println
from new header<print>
[94] - spanstream library (
std::span
-based string stream) from new header<spanstream>
[95] - a support for exclusive mode in
std::fstream
s[96] std::basic_ostream::operator<<(const volatile void*)
[97]
Containers Support
- multidimensional-span
std::mdspan
[98][99][100][101] - constructability and assignability of containers from other compatible ranges[62]
- flat set and flat map container adapters[102][103]
- non-deduction context for allocators in container deduction guides[104]
- heterogeneous erasure overloads for associative containers[105]
- allowing iterator pair construction in stack and queue[106]
- requiring
std::span
andstd::basic_string_view
to be trivially copyable[107]
C-Compatibility Support
- new header
<stdatomic.h>
[108]
Language defect reports
- C++ identifier syntax using Unicode Standard Annex 31[109]
- allowing duplicate attributes[110]
- changing scope of lambda trailing return type[111]
- making overloaded comparison operators less breaking change[112]
- undeprecating volatile compound assignments[113][114]
- fixing the compatibility and portability of
char8_t
[115] - relaxing requirements on
wchar_t
to match existing practices[116] - allowing some pointers and references of
this
or unknown origin in constant expressions[117] - introduction of immediate-escalating functions promoted to immediate functions[118]
- allowing
static_assert(false)
in uninstantiated template contexts
Library defect reports
- changes in ranges library:
- conditionally borrowed ranges[119]
- repairing input range adaptors and
std::counted_iterator
[120] - relaxing the constraint on
std::ranges::join_view
[121] - renamed
std::ranges::split_view
tostd::ranges::lazy_split_view
and newsplit_view
[122] - removed
std::default_initializable
constraint from conceptstd::ranges::view
[123] - view with ownership and new
std::ranges::owning_view
[124] - fixed
std::ranges::istream_view
[125]
- changes in text formatting library:
std::basic_format_string
[126]- compile-time format string checks
- reducing binary code size of
std::format_to
[127] - fixing locale handling in chrono formatters[128]
- improving width estimation[129] and fill character allowances of
std::format
[130] - use of forwarding references in format arguments to allow non-const-formattable types[131]
- fully
constexpr
std::variant
andstd::optional
[132] - supporting types derived from
std::variant
instd::visit
[133]
Removed features and deprecation
Removed features:
- Garbage Collection Support and Reachability-Based Leak Detection. It was added to the standard since C++11 but no compilers support this feature until C++23.[134]
- Mixed wide string literal concatenation.[135]
- Non-encodable wide character literals and multicharacter wide character literals.[136]
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[139]
Compiler support
- 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
. [140]
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:[141]
- Literal suffixes for
std::size t
and the corresponding signed type - A member function
contains
forstd::basic_string
andstd::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:[142]
- Removing unnecessary empty parameter list
()
from lambda expressions. - Repairing input range adaptors and
counted_iterator
. - Relax the requirements for
time_point::clock
.[143] std::visit
for classes that are derived fromstd::variant
.- Locks lock lockables.[144]
- 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:[145]
- Consteval if (
if consteval
). - Narrowing contextual conversions to
bool
. - Allowing duplicate attributes.
std::span
-based string-stream (<spanstream>
).std::out_ptr()
andstd::inout_ptr()
.constexpr
forstd::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_with
andends_with
for arbitrary ranges. - Renamed
split_view
tolazy_split_view
and newsplit_view
. - Relaxing the constraint on
join_view
. - Removing
default_initializable
constraint from conceptview
. - Range constructor for
std::basic_string_view
.
- Generalized
- Prohibiting
std::basic_string
andstd::basic_string_view
construction 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:[146]
- 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.[147] - 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::stacktrace
which is equivalent tostd::basic_stacktrace<std::pmr::polymorphic_allocator>
.[148] - Changes in ranges library:
- Refined definition of a view.
- Replacing function template
std::ranges::istream_view
with alias templatesstd::ranges::istream_view
,std::ranges::wistream_view
, and customization point objectstd::views::istream
. zip
range adaptor family:zip_view
zip_transform_view
adjacent_view
(andstd::views::pairwise
being equivalent tostd::views::adjacent<2>
)adjacent_transform_view
(andstd::views::pairwise_transform
being 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
volatile
pointers (volatile T*
). std::byteswap
.- Heterogeneous erasure overloads for associative containers.
- Every specialization of
std::span
andstd::basic_string_view
is trivially copyable. - Adding conditional
noexcept
specifications tostd::exchange
.[149] - Revamped specification and use of integer-class types.[150]
- 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."[151]
After the virtual WG21 meeting of 7 February 2022, the following features are added where they were approved by straw polls:[152]
- Allowed attributes on the function call operator of a lambda
std::expected
constexpr
forcmath
andcstdlib
- 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
andranges::shift_right
views::join_with
- Windowing range adaptors:
views::chunk
andviews::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:[153]
- 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 bestatic
. - 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 suffixesf16
f32
f64
f128
bf16
orF16
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
andunsigned 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 tostd::span
. flat_map
andflat_set
were added to the standard library.- Added the
std::print
andstd::println
functions for printing formatted text to stdout. - Provide the named modules
std
andstd.compat
for importing the standard library. - Added support for exclusive mode
fstreams
, analogous to the "x" flag infopen
. - 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 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::tuple
compatible with other tuple-like objects. - Explicit lifetime management for implicit-lifetime types.
- Made
std::bitset
and integral overloads ofstd::to_chars
andstd::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.
After the hybrid WG21 meeting of 7 November 2022, the following features and defect reports are added where they were approved by straw polls:[154]
- Allowed
operator[]
to bestatic
. - Allowed
static
andthread local
variables to appear inconstexpr
functions if they are usable in constant expressions. consteval
propagates upwards, that is, certain existingconstexpr
functions becomeconsteval
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.[155]
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:[156]
- Referencing the Unicode Standard.[157]
- Stashing stashing iterators for proper flattening.[158]
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
andstacktrace
- A type trait
std::is_implicit_lifetime
std::common_reference_t
ofstd::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
- ↑ "Working Draft, Standard for Programming Language C++". 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.
- ↑ "P2145R0: Evolving C++ Remotely". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2145r0.html.
- ↑ 6.0 6.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.
- ↑ 7.0 7.1 7.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 constexpr
variables inconstexpr
functions". 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.
- ↑ 47.0 47.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.
- ↑ 62.0 62.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.
- ↑ 73.0 73.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
: renamepointer
andcontiguous
". 15 June 2022. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2604r0.html. - ↑ "Add the missing
empty
tomdspan
". 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_t
Compatibility and Portability Fix". 2022-06-17. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2513r3.html. - ↑ "Relax requirements on
wchar_t
to 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.
- ↑ "
consteval
needs 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.
- ↑ "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++ 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.
Original source: https://en.wikipedia.org/wiki/C++23.
Read more |