C++20
C++20 is a version of the ISO/IEC 14882 standard for the C++ programming language. C++20 replaced the prior version of the C++ standard, called C++17, and was later replaced by C++23.[1] The standard was technically finalized[2] by WG21 at the meeting in Prague in February 2020,[3] had its final draft version announced in March 2020,[4] was approved on 4 September 2020,[5][6] and published in December 2020.[7]
Features
C++20 adds more new major features than C++14 or C++17.[8] Changes that have been accepted into C++20 include:[9]
Language
- concepts,[10] with terse syntax[11]
- modules[12]
- designated initializers[13] (based on the C99 feature, and common g++ extension)
[=, this]
as a lambda capture[14]- template parameter lists on lambdas[15]
- three-way comparison using the "spaceship operator",
operator <=>
- initialization of an additional variable within a range-based
for
statement[16] - lambdas in unevaluated contexts[17][18]
- default constructible and assignable stateless lambdas[17][19]
- allow pack expansions in lambda init-capture[17][20]
- class types in non-type template parameters, also allowing string literals as template parameters[21]
- removing the need for
typename
in certain circumstances[22] - new standard attributes
no unique address
,[23]likely
andunlikely
[24] - conditional
explicit
, allowing theexplicit
modifier to be contingent on a boolean expression[25] - expanded
constexpr
: virtual functions,[26]union
,[27]try
andcatch
,[28]dynamic_cast
andtypeid
,[29]std::pointer_traits
[30] - immediate functions using the new
consteval
keyword[31] - signed integers are now defined to be represented using two's complement (signed integer overflow remains undefined behavior)[32]
- a revised memory model[33]
- various improvements to structured bindings (interaction with lambda captures,
static
andthread_local
storage duration)[34][35] - coroutines[36]
using
on scopedenum
s[37]constinit
keyword[38]
Library
- ranges (The One Ranges Proposal)[39]
std::make_shared
andstd::allocate_shared
for arrays[40]- atomic smart pointers (such as
std::atomic<shared_ptr<T>>
andstd::atomic<weak_ptr<T>>
)[41] std::to_address
to convert a pointer to a raw pointer[42]- calendar and time-zone additions to
<chrono>
[43] std::span
, providing a view to a contiguous array (analogous tostd::string_view
butspan
can mutate the referenced sequence)[44]std::erase
andstd::erase_if
, simplifying element erasure for most standard containers[45]<version>
header[46]std::bit_cast<>
for type casting of object representations, with less verbosity thanmemcpy()
and more ability to exploit compiler internals[47]- feature test macros[48]
- various constexpr library bits[49]
- smart pointer creation with default initialization[50]
contains
-method for associative containers[51]- bit operations, such as leading/trailing zero/one count,[52] and log2 operations[53][54][55]
std::bind_front
[56]
New and changed keywords
Many new keywords added (and the new "spaceship operator", operator <=>
), such as concept
, constinit
,[38] consteval
, co_await
, co_return
, co_yield
, requires
(plus changed meaning for export
), and char8_t
(for UTF-8 support).[57] And explicit
can take an expression since C++20.[58] Most of the uses of the volatile
keyword have been deprecated.[59]
In addition to keywords, there are identifiers with special meaning, including new import
and module
.
New attributes in C++20:
likely
, unlikely
, and no unique address
[60]
Removed and deprecated
Removed features:[61]
- The C-derived headers
<ccomplex>
,<ciso646>
,<cstdalign>
,<cstdbool>
and<ctgmath>
were removed, as they serve no purpose in C++. (The corresponding<*.h>
headers remain, for compatibility with C.) - The use of
throw()
as an exception specification was removed. - Some previously deprecated library features were removed, including
std::uncaught_exception
,std::raw_storage_iterator
,std::is_literal_type
,std::is_literal_type_v
,std::result_of
andstd::result_of_t
.
Deprecated features:
- Use of comma operator in subscript expressions has been deprecated[62]
- (most of)
volatile
has been deprecated[59]
Published as Technical Specifications
Deferred to a later standard
- Contracts – a new study group (SG21) has been formed to work on a new proposal[67]
- Reflection[68][69]
- Metaclasses[70]
- Executors[71]
- Networking extensions,[72][73] including async, basic I/O services, timers, buffers and buffer-oriented streams, sockets, and Internet protocols (blocked by executors)
- Properties[74]
- Extended futures[75]
Compiler support
Full support[76]
- Visual Studio 2019 supports all C++20 features through its
/std:c++latest
option, as of version 16.10.0.[77] An option/std:c++20
to enable C++20 mode is added in version 16.11.0.[78][79]
Microsoft's compiler does not just support Windows, also Linux (and e.g. Android and iOS), while it then requires the "Visual C++ for Linux Development extension".[80]
Partial
- Clang has partial C++20 support that can be enabled with the option
-std=c++20
(version 10 and later) or-std=c++2a
(version 9 and earlier).[81] - EDG started implementing C++20 features in version 5.0 and as of version 6.1 supports most C++20 core language features.[82]
- GCC added partial, experimental C++20 support in 2017[83] in version 8 through the option
-std=c++2a
. Like Clang, GCC replaced this option with-std=c++20
in version 10. It also has an option to enable GNU extensions in addition to the experimental C++20 support,-std=gnu++20
.[84]
History
Changes applied to the C++20 working draft in July 2017 (Toronto) include:[85]
- concepts (what made it into the standard is a cut-down version; also described as "Concepts Lite"[86])
- designated initializers
[=, this]
as a lambda capture- template parameter lists on lambdas
std::make_shared
andstd::allocate_shared
for arrays
Changes applied to the C++20 working draft in the fall meeting in November 2017 (Albuquerque) include:[87][88]
- three-way comparison using the "spaceship operator",
operator <=>
- initialization of an additional variable within a range-based
for
statement - lambdas in unevaluated contexts
- default constructible and assignable stateless lambdas
- allow pack expansions in lambda init-capture
- string literals as template parameters
- atomic smart pointers (such as
std::atomic<shared_ptr<T>>
andstd::atomic<weak_ptr<T>>
) std::to_address
to convert a pointer to a raw pointer
Changes applied to the C++20 working draft in March 2018 (Jacksonville) include:[89]
- removing the need for
typename
in certain circumstances - new standard attributes
no unique address
,likely
andunlikely
- calendar and time-zone additions to
<chrono>
std::span
, providing a view to a contiguous array (analogous tostd::string_view
butspan
can mutate the referenced sequence)<version>
header
Changes applied to the C++20 working draft in the summer meeting in June 2018 (Rapperswil) include:[90]
contracts(later deferred to a later standard)[91]- feature test macros
- bit-casting of object representations, with less verbosity than
memcpy()
and more ability to exploit compiler internals - conditional
explicit
, allowing the explicit modifier to be contingent on a boolean expression - constexpr virtual functions
Changes applied to the C++20 working draft in the fall meeting in November 2018 (San Diego) include:[92]
- ranges (The One Ranges Proposal)
- concept terse syntax
constexpr
union
,try
andcatch
,dynamic_cast
,typeid
andstd::pointer_traits
.- various
constexpr
library bits - immediate functions using the new
consteval
keyword - signed integers are now defined to be represented using two's complement (signed integer overflow remains undefined behavior)
refinements of the contracts facility (access control in contract conditions)[93] (see list of features deferred to a later standard)- a revised memory model
- smart pointer creation with default initialization
Changes applied to the C++20 working draft in the winter meeting in February 2019 (Kona) include:[94][95][96]
- coroutines
- modules
- various improvements to structured bindings (interaction with lambda captures,
static
andthread_local
storage duration)
Changes applied to the C++20 working draft in the summer meeting in July 2019 (Cologne) include:[97][98][99][100]
- contracts were removed (see list of features deferred to a later standard)[101]
- use of comma operator in subscript expressions has been deprecated[62]
constexpr
additions (trivial default initialization,[102] unevaluated inline-assembly[103])- using scoped
enum
s[37] - various changes to the spaceship operator[104][105]
- DR: minor changes to modules[106]
constinit
keyword- changes to concepts (removal of
-> Type
return-type-requirements[107]) - (most of)
volatile
has been deprecated[59] - DR:
nodiscard
effects on constructors[108] - The new standard library concepts will not use PascalCase (rather
standard_case
, as the rest of the standard library)[109] - text formatting (
std::format
, [110][111]chrono
integration,[112] corner case fixes[113]) - bit operations[52]
constexpr INVOKE
[114]- math constants[115]
- consistency additions to atomics (
std::atomic_ref<T>
,[116]std::atomic<std::shared_ptr<T>>
[117]) - add the
<=>
operator to the standard library[118] - header units for the standard library[119]
- synchronization facilities[120] (merged from: Efficient atomic waiting and semaphores,[121] latches and barriers,[122] Improving
atomic_flag
,[123] Don't Make C++ Unimplementable On Small CPUs[124]) std::source_location
[125]constexpr
containers (std::string
,[126]std::vector
[127])std::stop_token
and joining thread (std::jthread
)[128]
Changes applied during the NB comment resolution in the fall meeting in November 2019 (Belfast) include:[129][130][131][132]
- Class Types in Non-Type Template Parameters (NTTP): The restriction of no user-defined
operator==
allowed has been removed as the meaning of template argument equality has been divorced fromoperator==
.[133] This allows also for array members in class-type NTTP. - Floating-point types,[134] pointers and references and unions and union-like classes (class types containing anonymous unions) are now allowed as NTTP.
- Function identity now also includes trailing requires-clauses (P1971)
- Constrained non-template functions have been removed
<compare>
is now available in freestanding implementations[135]std::span
s typedef was changed fromindex_type
tosize_type
to be consistent with the rest of the standard library[136]- Concept traits have been renamed to follow the renaming of the concepts as a result from the Cologne meeting
- Several fixes and additions to ranges (P1456R1: Move-only views,[137] P1391R4: Range constructor for
std::string_view
(constructor from iterator-pair of characters),[138] P1394R4: Range constructor forstd::span<ref>
,[139] P1870R1: forwarding-range<T> is too subtle[140]) - Initialization for
std::atomic<T>
has been changed to make it work with default and list initialization,[141]std::latch
andstd::barrier
can now report the maximum number of threads that the implementation supports through the new member functionmax()
std::weak_equality
andstd::strong_equality
have been removed as they are not used anymore- Algorithms in
<numeric>
have been madeconstexpr
- Missing feature-test macros for new or changed features of C++20 have been added[142]
References
- ↑ "The Standard". https://isocpp.org/std/the-standard. Retrieved 7 September 2020.
- ↑ Sutter, Herb (2019-10-01). "P1000R3: C++ IS schedule". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1000r3.pdf.
- ↑ Dusíková, Hana (2019-11-06). "N4817: 2020 Prague Meeting Invitation and Information". https://open-std.org/JTC1/SC22/WG21/docs/papers/2019/n4817.pdf.
- ↑ "N4859 Editors' Report -- Programming Languages -- C++". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4859.html.
- ↑ "Current Status". https://isocpp.org/std/status. Retrieved 7 September 2020.
- ↑ "C++20 Approved -- Herb Sutter". https://isocpp.org/blog/2020/09/cpp20-approved-herb-sutter. Retrieved 8 September 2020.
- ↑ "ISO/IEC 14882:2020". https://www.iso.org/standard/79358.html.
- ↑ "Why does the C++ standard ship every three years?". 13 July 2019. https://herbsutter.com/2019/07/13/draft-faq-why-does-the-c-standard-ship-every-three-years/.
- ↑ "P0592R0: To boldly suggest an overall plan for C++20". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0592r0.html.
- ↑ "P0606R0: Concepts Are Ready". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0606r0.pdf.
- ↑ "P1141R1 - Yet another approach for constrained declarations". http://open-std.org/JTC1/SC22/WG21/docs/papers/2018/p1141r1.html.
- ↑ "N4720: Working Draft, Extensions to C++ for Modules". https://isocpp.org/files/papers/n4720.pdf.
- ↑ "Designated Initialization Wording". https://wg21.link/p0329.
- ↑ Thomas Köppe. "Allow lambda capture [=, this"]. https://wg21.link/p0409.
- ↑ "Familiar template syntax for generic lambdas". https://wg21.link/p0428.
- ↑ "Range-based for statements with initializer". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0614r0.html.
- ↑ 17.0 17.1 17.2 "Trip Report: C++ Standards Meeting in Albuquerque, November 2017" (in en-US). There's Waldo!. 2017-11-20. https://botondballo.wordpress.com/2017/11/20/trip-report-c-standards-meeting-in-albuquerque-november-2017/.
- ↑ "Wording for lambdas in unevaluated contexts". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0315r4.pdf.
- ↑ "Default constructible and assignable stateless lambdas". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0624r2.pdf.
- ↑ "Pack expansion in lambda init-capture". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0780r0.html.
- ↑ "Class Types in Non-Type Template Parameters". 2018-06-06. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0732r2.pdf.
- ↑ "Down with typename!". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0634r3.html.
- ↑ "Language support for empty objects". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0840r2.html.
- ↑ "Proposed wording for likely and unlikely attributes (Revision 5)". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0479r5.html.
- ↑ "explicit(bool)". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0892r2.html.
- ↑ "Allowing Virtual Function Calls in Constant Expressions". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1064r0.html.
- ↑ "P1330R0 - Changing the active member of a union inside constexpr". https://wg21.link/p1330.
- ↑ "P1002R0 - Try-catch blocks in constexpr functions". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1002r0.pdf.
- ↑ "P1327R0 - Allowing dynamic_cast, polymorphic typeid in Constant Expressions". https://wg21.link/p1327.
- ↑ "P1006R1 - Constexpr in std::pointer_traits". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1006r1.pdf.
- ↑ "P1073R2 - Immediate functions". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1073r2.html.
- ↑ "P1236R0: Alternative Wording for P0907R4 Signed Integers are Two's Complement". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1236r0.html.
- ↑ "P0668R4: Revising the C++ memory model". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0668r4.html.
- ↑ "P1091R1: Extending structured bindings to be more like variable declarations". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1091r1.html.
- ↑ "P1091R2: Extending structured bindings to be more like variable declarations". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1091r2.html.
- ↑ "N4649: Working Draft, Technical Specification for C++ Extensions for Coroutines". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4649.pdf.
- ↑ 37.0 37.1 "P1099R5: Using Enum". 2019-07-20. http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p1099r5.html.
- ↑ 38.0 38.1 "P1143R2: Adding the constinit keyword". 2019-07-20. http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p1143r2.html.
- ↑ "P0896R3". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r3.pdf.
- ↑ "Extending make_shared to Support Arrays". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0674r1.html.
- ↑ Meredith, Alisdair; Sutter, Herb. "Revising atomic_shared_ptr for C++20". ISO. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0718r2.html. Retrieved 27 December 2018.
- ↑ "Utility to convert a pointer to a raw pointer". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0653r2.html.
- ↑ "Extending <chrono> to Calendars and Time Zones". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0355r7.html.
- ↑ "span: bounds-safe views for sequences of objects". http://wg21.link/p0122.
- ↑ "Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20". 2018-10-04. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html.
- ↑ Alan Talbot. "<version>". http://wg21.link/p0754.
- ↑ "Bit-casting object representations". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0476r2.html.
- ↑ "Integrating feature-test macros into the C++ WD (rev. 2)". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0941r2.html.
- ↑ "P1032R1 - Misc constexpr bits". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1032r1.html.
- ↑ "Smart pointer creation with default initialization". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1020r1.html.
- ↑ "P0458R2: Checking for Existence of an Element in Associative Containers". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0458r2.html.
- ↑ 52.0 52.1 "P0553R4: Bit operations". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0553r4.html.
- ↑ "P0556R3: Integral power-of-2 operations". 2018-06-06. https://wg21.link/p0556r3.
- ↑ "P1355R2 Exposing a narrow contract for ceil2". 2019-06-11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1355r2.html.
- ↑ "On the names of low-level bit manipulation functions". 2020-02-11. https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1956r1.pdf.
- ↑ Tomasz Kamiński (2017-11-09). "Simplified partial function application". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0356r3.html.
- ↑ "C++ keywords - cppreference.com". https://en.cppreference.com/w/cpp/keyword.
- ↑ "explicit specifier - cppreference.com". https://en.cppreference.com/w/cpp/language/explicit.
- ↑ 59.0 59.1 59.2 "P1152R4: Deprecating volatile". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1152r3.html.
- ↑ "attribute specifier sequence(since C++11) - cppreference.com". https://en.cppreference.com/w/cpp/language/attributes.
- ↑ "Working Draft, Standard for Programming Language C++ (Annex C, §C.1)". http://open-std.org/JTC1/SC22/WG21/docs/papers/2020/n4861.pdf.
- ↑ 62.0 62.1 "P1161R2: Deprecate uses of the comma operator in subscripting expressions". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1161r2.html.
- ↑ "C++ Extensions for Parallelism Version 2". https://wg21.link/N4793.
- ↑ "Task Blocks". 3 March 2017. http://www.modernescpp.com/index.php/task-blocks.
- ↑ "C++ Extensions for Reflection". https://wg21.link/N4818.
- ↑ "C++ Extensions for Networking". https://wg21.link/N4711.
- ↑ Sutter, Herb (2019-07-20). "Trip report: Summer ISO C++ standards meeting (Cologne)" (in en). https://herbsutter.com/2019/07/20/trip-report-summer-iso-c-standards-meeting-cologne/.
- ↑ "Reflections on the reflection proposals - Meeting C++" (in en). https://meetingcpp.com/index.php/br/items/reflections-on-the-reflection-proposals.html.
- ↑ "Static reflection". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0194r6.html.
- ↑ Herb Sutter. "Metaclasses". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0707r0.pdf.
- ↑ "A Unified Executors Proposal for C++". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0443r10.html.
- ↑ "N4771: Working Draft, C++ Extensions for Networking". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4771.pdf.
- ↑ "ISO/IEC TS 19216:2018 Programming Languages -- C++ Extensions for Networking". https://www.iso.org/standard/64030.html.
- ↑ "A General Property Customization Mechanism". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1393r0.html.
- ↑ "A Unified Futures Proposal for C++". https://wg21.link/P1054.
- ↑ "C++ compiler support - cppreference.com". https://en.cppreference.com/w/cpp/compiler_support.
- ↑ jawiddis. "Visual Studio 2019 version 16.10 Release Notes" (in en-us). https://docs.microsoft.com/en-us/visualstudio/releases/2019/release-notes-v16.10#16.10.0.
- ↑ "MSVC C++20 and the /std:c++20 Switch" (in en-us). 2 September 2021. https://devblogs.microsoft.com/cppblog/msvc-cpp20-and-the-std-cpp20-switch/.
- ↑ Visual Studio documentation for Microsoft C++, Microsoft Docs, 2022-04-19, https://github.com/MicrosoftDocs/cpp-docs/blob/578dd21279a897661686617375dff80f1eb2f40c/docs/overview/cpp-conformance-improvements.md, retrieved 2022-04-19
- ↑ "Visual Studio 2019 Compatibility" (in en-us). https://docs.microsoft.com/en-us/visualstudio/releases/2019/compatibility.
- ↑ "Clang - C++ Programming Language Status". https://clang.llvm.org/cxx_status.html.
- ↑ "C++ compiler support - cppreference.com". https://en.cppreference.com/w/cpp/compiler_support.
- ↑ "Andrew Sutton - [PATCH Add -std=c++2a"]. https://gcc.gnu.org/legacy-ml/gcc-patches/2017-07/msg01234.html.
- ↑ "C++ Standards Support in GCC - GNU Project". https://gcc.gnu.org/projects/cxx-status.html.
- ↑ Herb Sutter (15 July 2017). "Trip report: Summer ISO C++ standards meeting (Toronto)". https://herbsutter.com/2017/07/15/trip-report-summer-iso-c-standards-meeting-toronto/.
- ↑ "Concepts Lite: Constraining Templates with Predicates". 2013-02-24. https://isocpp.org/blog/2013/02/concepts-lite-constraining-templates-with-predicates-andrew-sutton-bjarne-s.
- ↑ Herb Sutter (11 November 2017). "Trip report: Fall ISO C++ standards meeting (Albuquerque)". https://herbsutter.com/2017/11/11/trip-report-fall-iso-c-standards-meeting-albuquerque/.
- ↑ Smith, Richard; Perchik, Dawn; Köppe, Thomas. "N4714 Editors' Report -- Programming Languages -- C++". GitHub. https://github.com/cplusplus/draft/blob/master/papers/n4714.md. Retrieved 27 December 2018.
- ↑ Botond Ballo (28 March 2018). "Trip Report: C++ Standards Meeting in Jacksonville, March 2018". https://botondballo.wordpress.com/2018/03/28/trip-report-c-standards-meeting-in-jacksonville-march-2018/.
- ↑ Herb Sutter (2 July 2018). "Trip report: Summer ISO C++ standards meeting (Rapperswil)". https://herbsutter.com/2018/07/02/trip-report-summer-iso-c-standards-meeting-rapperswil/.
- ↑ "Support for contract based programming in C++". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0542r5.html.
- ↑ fall meeting in November 2018
- ↑ "P1289R0 - Access control in contract conditions". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1289r0.pdf.
- ↑ winter meeting in February 2019
- ↑ "r/cpp - 2019-02 Kona ISO C++ Committee Trip Report (C++20 design is complete; Modules in C++20; Coroutines in C++20; Reflection TS v1 published; work begins on a C++ Ecosystem Technical Report)" (in en). 23 February 2019. https://www.reddit.com/r/cpp/comments/au0c4x/201902_kona_iso_c_committee_trip_report_c20/.
- ↑ "Trip report: Winter ISO C++ standards meeting (Kona)" (in en). 2019-02-23. https://herbsutter.com/2019/02/23/trip-report-winter-iso-c-standards-meeting-kona/.
- ↑ "2019 Cologne Meeting Invitation and Information". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/n4783.pdf.
- ↑ "r/cpp - 2019-07 Cologne ISO C++ Committee Trip Report — 🚀 The C++20 Eagle has Landed 🚀 (C++20 Committee Draft shipped; Contracts Moved From C++20 to a Study Group; 'std::format' in C++20; C++20 Synchronization Library)" (in en). 20 July 2019. https://www.reddit.com/r/cpp/comments/cfk9de/201907_cologne_iso_c_committee_trip_report_the/.
- ↑ Botond Ballo (26 July 2019). "Trip Report: C++ Standards Meeting in Cologne, July 2019". https://botondballo.wordpress.com/2019/07/26/trip-report-c-standards-meeting-in-cologne-july-2019/.
- ↑ Sutter, Herb (20 July 2019). "Trip report: Summer ISO C++ standards meeting (Cologne)". https://herbsutter.com/2019/07/20/trip-report-summer-iso-c-standards-meeting-cologne/.
- ↑ Josuttis, Nicolai. "P1823R0: Remove Contracts from C++20". https://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p1823r0.pdf.
- ↑ "Permitting trivial default initialization in constexpr contexts". https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1331r1.pdf.
- ↑ "P1668R1: Enabling Constexpr Intrinsics By Permitting Unevaluated inline-asm in Constexpr Functions". http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p1668r1.html.
- ↑ "P1186R3: When do you actually use <=>?". 2019-07-20. http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p1186r3.html.
- ↑ "P1630R1: Spaceship needs a tune-up". 2019-07-20. http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p1630r1.html.
- ↑ "P1766R1: Mitigating minor modules maladies". 2019-07-20. http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p1766r1.html.
- ↑ "P1452R2: On the non-uniform semantics of return-type-requirements". 2019-07-20. http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p1452r2.html.
- ↑ "P1771R1: nodiscard for constructors". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1771r1.pdf.
- ↑ "P1754R1: Rename concepts to standard_case for C++20, while we still can". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1754r1.pdf.
- ↑ "P0645R10: Text Formatting". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html.
- ↑ "std::format in C++20". 2019-07-23. http://www.zverovich.net/2019/07/23/std-format-cpp20.html.
- ↑ "P1361R2: Integration of chrono with text formatting". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1361r2.pdf.
- ↑ "P1652R1: Printf corner cases in std::format". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1652r1.html.
- ↑ "P1965R2: constexpr INVOKE". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1065r2.html.
- ↑ "P0631R8: Math Constants". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0631r8.pdf.
- ↑ "P1643R1: Add wait/notify to atomic_ref<T>". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1643r1.html.
- ↑ "P1664R0: Add wait/notify to atomic<shared_ptr<T>>". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1644r0.html.
- ↑ "P1614R2: The Mothership has Landed - Adding <=> to the Library". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html.
- ↑ "P1502R1: Standard library header units for C++20". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1502r1.html.
- ↑ "P1135R6: The C++20 Synchronization Library". 2019-07-20. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1135r6.html.
- ↑ "P0514R4: Efficient concurrent waiting for C++20". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0514r4.pdf.
- ↑ "P0666R2: Revised Latches and Barriers for C++20". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0666r2.pdf.
- ↑ "P0995R1: Improving atomic_flag". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0995r1.html.
- ↑ "P1285R0: Don't Make C++ Unimplementable On Small CPUs". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1258r0.html.
- ↑ "P1208R6: Adopt source_location from Library Fundamentals V3 for C++20". http://open-std.org/JTC1/SC22/WG21/docs/papers/2019/p1208r6.pdf.
- ↑ "P0980R1: Making std::string constexpr". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0980r1.pdf.
- ↑ "P1004R2: Making std::vector constexpr". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1004r2.pdf.
- ↑ "P0660R10: Stop Token and Joining Thread". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0660r10.pdf.
- ↑ fall meeting in November 2019
- ↑ "r/cpp - 2019-11 Belfast ISO C++ Committee Trip Report — Started Processing Feedback on the C++20 Committee Draft; ABI Review Group Formed" (in en-US). 9 November 2019. https://www.reddit.com/r/cpp/comments/dtuov8/201911_belfast_iso_c_committee_trip_report/.
- ↑ Sutter, Herb (2019-11-09). "Trip report: Autumn ISO C++ standards meeting (Belfast)" (in en). https://herbsutter.com/2019/11/09/trip-report-autumn-iso-c-standards-meeting-belfast/.
- ↑ botondballo (2019-11-15). "Trip Report: C++ Standards Meeting in Belfast, November 2019" (in en). https://botondballo.wordpress.com/2019/11/15/trip-report-c-standards-meeting-in-belfast-november-2019/.
- ↑ "P1907R0: Inconsistencies with non-type template parameters". 2019-10-07. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1907r0.html.
- ↑ "P1714: NTTP are incomplete without float, double, and long double! (Revision 1)". 2019-07-19. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1714r1.html.
- ↑ "P1855R=: Make <compare> freestanding". 2019-10-05. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1855r0.html.
- ↑ "P1872R0: span should have size_type not index_type". 2019-09-16. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1872r0.pdf.
- ↑ "P1456: Move-only views". 2019-01-25. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1456r0.pdf.
- ↑ "P1391: Range constructor for std::string_view". http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1391r4.pdf.
- ↑ "P1394: Range constructor for std::span". 2019-08-02. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1394r3.pdf.
- ↑ "P1870R1: forwarding-range<T> is too subtle". 6 October 2019. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1870r0.html.
- ↑ "P0883: Fixing Atomic Initialization". 2018-06-05. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0883r1.pdf.
- ↑ "Missing feature-test macros 2018-2019". 2019-10-06. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1902r0.html.
External links
- Link to purchase ISO/IEC 14882:2020 from the ISO online store.
- N4860, the final draft version of the standard.
- JTC1/SC22/WG21 – the ISO/IEC C++ Standard Working Group (a.k.a. the C++ Standards Committee)
- Ranges (range-v3) GitHub repository, by Eric Niebler
Original source: https://en.wikipedia.org/wiki/C++20.
Read more |