Difference between revisions of "Template:cpp/compiler support/20"
From cppreference.com
m |
(Update to C++20) |
||
Line 1: | Line 1: | ||
− | + | === C++20 core language features === | |
− | + | {{compiler support|std=c++20| | |
− | + | ||
− | {{compiler support|std=c++ | + | |
<!-- 201703 --> | <!-- 201703 --> | ||
{{compiler_support_row | {{compiler_support_row | ||
| feature=Allow lambda-capture {{tt|1=[=, this]}} | | feature=Allow lambda-capture {{tt|1=[=, this]}} | ||
| reference={{wg21|P0409R2}} | | reference={{wg21|P0409R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| clang={{yes|6}} | | clang={{yes|6}} | ||
| aclang={{yes|{{aclang ver|10.0}}}} | | aclang={{yes|{{aclang ver|10.0}}}} | ||
Line 19: | Line 17: | ||
| feature={{tt|__VA_OPT__}} | | feature={{tt|__VA_OPT__}} | ||
| reference={{wg21|P0306R4}}<br>{{wg21|P1042R1}} | | reference={{wg21|P0306R4}}<br>{{wg21|P1042R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| clang={{yes|9}} | | clang={{yes|9}} | ||
| aclang={{yes|{{aclang ver|10.0}}}} | | aclang={{yes|{{aclang ver|10.0}}}} | ||
Line 28: | Line 26: | ||
| feature=[[cpp/language/aggregate initialization#Designated initializers|Designated initializers]] | | feature=[[cpp/language/aggregate initialization#Designated initializers|Designated initializers]] | ||
| reference={{wg21|P0329R4}} | | reference={{wg21|P0329R4}} | ||
− | | version=c++ | + | | version=c++20-lang |
| clang={{yes|1=<span title="Full C99 compatible superset of P0329, missing brace initializers">3.0 (partial)*</span><br>10}} | | clang={{yes|1=<span title="Full C99 compatible superset of P0329, missing brace initializers">3.0 (partial)*</span><br>10}} | ||
| gcc={{yes||1=<span title="As non-standard extension that formed the basis for P0329, missing brace initializers">4.7 (partial)*</span><br>8}} | | gcc={{yes||1=<span title="As non-standard extension that formed the basis for P0329, missing brace initializers">4.7 (partial)*</span><br>8}} | ||
Line 37: | Line 35: | ||
| feature=template-parameter-list for generic lambdas | | feature=template-parameter-list for generic lambdas | ||
| reference={{wg21|P0428R2}} | | reference={{wg21|P0428R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|8}} | | gcc={{yes|8}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 46: | Line 44: | ||
| feature=Default member initializers for bit-fields | | feature=Default member initializers for bit-fields | ||
| reference={{wg21|P0683R1}} | | reference={{wg21|P0683R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| clang={{yes|6}} | | clang={{yes|6}} | ||
| aclang={{yes|{{aclang ver|10.0}}}} | | aclang={{yes|{{aclang ver|10.0}}}} | ||
Line 55: | Line 53: | ||
| feature=Initializer list constructors in class template argument deduction | | feature=Initializer list constructors in class template argument deduction | ||
| reference={{wg21|P0702R1}} | | reference={{wg21|P0702R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| clang={{yes|6}} | | clang={{yes|6}} | ||
| msvc={{yes|{{msvc ver|2017.7}}}} | | msvc={{yes|{{msvc ver|2017.7}}}} | ||
Line 64: | Line 62: | ||
| feature=const&-qualified pointers to members | | feature=const&-qualified pointers to members | ||
| reference={{wg21|P0704R1}} | | reference={{wg21|P0704R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| clang={{yes|6}} | | clang={{yes|6}} | ||
| aclang={{yes|{{aclang ver|10.0}}}} | | aclang={{yes|{{aclang ver|10.0}}}} | ||
Line 74: | Line 72: | ||
| feature=[[cpp/language/constraints|Concepts]] | | feature=[[cpp/language/constraints|Concepts]] | ||
| reference={{wg21|P0734R0}} | | reference={{wg21|P0734R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|6<br/>(TS only)<br/>10}} | | gcc={{yes|6<br/>(TS only)<br/>10}} | ||
| clang={{yes|10}} | | clang={{yes|10}} | ||
Line 83: | Line 81: | ||
| feature=Lambdas in unevaluated contexts | | feature=Lambdas in unevaluated contexts | ||
| reference={{wg21|P0315R4}} | | reference={{wg21|P0315R4}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
}} | }} | ||
Line 89: | Line 87: | ||
| feature= [[cpp/language/operator_comparison#Three-way_comparison|Three-way comparison operator]] | | feature= [[cpp/language/operator_comparison#Three-way_comparison|Three-way comparison operator]] | ||
| reference={{wg21|P0515R3}} | | reference={{wg21|P0515R3}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| msvc={{yes|{{msvc ver|2019}}}} | | msvc={{yes|{{msvc ver|2019}}}} | ||
Line 98: | Line 96: | ||
| feature=DR: Simplifying implicit lambda capture | | feature=DR: Simplifying implicit lambda capture | ||
| reference={{wg21|P0588R1}} | | reference={{wg21|P0588R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|8}} | | gcc={{yes|8}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 106: | Line 104: | ||
| feature=init-statements for range-based for | | feature=init-statements for range-based for | ||
| reference={{wg21|P0614R1}} | | reference={{wg21|P0614R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 115: | Line 113: | ||
| feature=Default constructible and assignable stateless lambdas | | feature=Default constructible and assignable stateless lambdas | ||
| reference={{wg21|P0624R2}} | | reference={{wg21|P0624R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 124: | Line 122: | ||
| feature=const mismatch with defaulted copy constructor | | feature=const mismatch with defaulted copy constructor | ||
| reference={{wg21|P0641R2}} | | reference={{wg21|P0641R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 133: | Line 131: | ||
| feature=Access checking on specializations | | feature=Access checking on specializations | ||
| reference={{wg21|P0692R1}} | | reference={{wg21|P0692R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes}} | | gcc={{yes}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 141: | Line 139: | ||
| feature=ADL and function templates that are not visible | | feature=ADL and function templates that are not visible | ||
| reference={{wg21|P0846R0}} | | reference={{wg21|P0846R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| msvc={{yes|{{msvc ver|2019.1}}}} | | msvc={{yes|{{msvc ver|2019.1}}}} | ||
Line 150: | Line 148: | ||
| feature=Less eager instantiation of constexpr functions | | feature=Less eager instantiation of constexpr functions | ||
| reference={{wg21|P0859R0}} | | reference={{wg21|P0859R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|1=<span title="mostly">5.2 (partial)*<br/>9</span>}} | | gcc={{yes|1=<span title="mostly">5.2 (partial)*<br/>9</span>}} | ||
}} | }} | ||
Line 157: | Line 155: | ||
| feature=Attributes {{attr|likely}} and {{attr|likely|unlikely}} | | feature=Attributes {{attr|likely}} and {{attr|likely|unlikely}} | ||
| reference={{wg21|P0479R5}} | | reference={{wg21|P0479R5}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 164: | Line 162: | ||
| feature=Make {{tt|typename}} more optional | | feature=Make {{tt|typename}} more optional | ||
| reference={{wg21|P0634R3}} | | reference={{wg21|P0634R3}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 171: | Line 169: | ||
| feature=Pack expansion in lambda init-capture | | feature=Pack expansion in lambda init-capture | ||
| reference={{wg21|P0780R2}} | | reference={{wg21|P0780R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| msvc={{yes|{{msvc ver|2019.2}}}} | | msvc={{yes|{{msvc ver|2019.2}}}} | ||
Line 179: | Line 177: | ||
| feature=Attribute {{attr|no_unique_address}} | | feature=Attribute {{attr|no_unique_address}} | ||
| reference={{wg21|P0840R2}} | | reference={{wg21|P0840R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 187: | Line 185: | ||
| feature=DR: Relaxing the [[cpp/language/structured binding|structured bindings]] customization point finding rules | | feature=DR: Relaxing the [[cpp/language/structured binding|structured bindings]] customization point finding rules | ||
| reference={{wg21|P0961R1}} | | reference={{wg21|P0961R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|8}} | | gcc={{yes|8}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 197: | Line 195: | ||
| feature=DR: Relaxing the [[cpp/language/range-for|range-{{tt|for}} loop]] customization point finding rules | | feature=DR: Relaxing the [[cpp/language/range-for|range-{{tt|for}} loop]] customization point finding rules | ||
| reference={{wg21|P0962R1}} | | reference={{wg21|P0962R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|8}} | | gcc={{yes|8}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 204: | Line 202: | ||
| feature=DR: Allow structured bindings to accessible members | | feature=DR: Allow structured bindings to accessible members | ||
| reference={{wg21|P0969R0}} | | reference={{wg21|P0969R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|8}} | | gcc={{yes|8}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 215: | Line 213: | ||
| feature=[[cpp/memory/new/operator delete|Destroying operator delete]] | | feature=[[cpp/memory/new/operator delete|Destroying operator delete]] | ||
| reference={{wg21|P0722R3}} | | reference={{wg21|P0722R3}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|6}} | | clang={{yes|6}} | ||
Line 224: | Line 222: | ||
| feature=Class types in non-type template parameters | | feature=Class types in non-type template parameters | ||
| reference={{wg21|P0732R2}} | | reference={{wg21|P0732R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
}} | }} | ||
Line 230: | Line 228: | ||
| feature=Deprecate implicit capture of {{tt|this}} via {{tt|1=[=]}} | | feature=Deprecate implicit capture of {{tt|this}} via {{tt|1=[=]}} | ||
| reference={{wg21|P0806R2}} | | reference={{wg21|P0806R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 238: | Line 236: | ||
| feature={{ltt|cpp/language/explicit|explicit(bool)}} | | feature={{ltt|cpp/language/explicit|explicit(bool)}} | ||
| reference={{wg21|P0892R2}} | | reference={{wg21|P0892R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 247: | Line 245: | ||
| feature=Integrating feature-test macros | | feature=Integrating feature-test macros | ||
| reference={{wg21|P0941R2}} | | reference={{wg21|P0941R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|5}} | | gcc={{yes|5}} | ||
| clang={{yes|3.4}} | | clang={{yes|3.4}} | ||
Line 256: | Line 254: | ||
| feature=Prohibit aggregates with user-declared constructors | | feature=Prohibit aggregates with user-declared constructors | ||
| reference={{wg21|P1008R1}} | | reference={{wg21|P1008R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 266: | Line 264: | ||
| feature=constexpr virtual function | | feature=constexpr virtual function | ||
| reference={{wg21|P1064R0}} | | reference={{wg21|P1064R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 274: | Line 272: | ||
| feature=Consistency improvements for comparisons | | feature=Consistency improvements for comparisons | ||
| reference={{wg21|P1120R0}} | | reference={{wg21|P1120R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{maybe|8 (partial)<br>10}} | | clang={{maybe|8 (partial)<br>10}} | ||
Line 284: | Line 282: | ||
| feature={{tt|char8_t}} | | feature={{tt|char8_t}} | ||
| reference={{wg21|P0482R6}} | | reference={{wg21|P0482R6}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|7}} | | clang={{yes|7}} | ||
Line 293: | Line 291: | ||
| feature={{ltf|cpp/types/is_constant_evaluated|std::is_constant_evaluated}} | | feature={{ltf|cpp/types/is_constant_evaluated|std::is_constant_evaluated}} | ||
| reference={{wg21|P0595R2}} | | reference={{wg21|P0595R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 302: | Line 300: | ||
| feature=constexpr {{tt|try}}-{{tt|catch}} blocks | | feature=constexpr {{tt|try}}-{{tt|catch}} blocks | ||
| reference={{wg21|P1002R1}} | | reference={{wg21|P1002R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| clang={{yes|8}} | | clang={{yes|8}} | ||
| aclang={{yes|{{aclang ver|10.0}}}} | | aclang={{yes|{{aclang ver|10.0}}}} | ||
Line 311: | Line 309: | ||
| feature=[[cpp/language/consteval|Immediate functions]] | | feature=[[cpp/language/consteval|Immediate functions]] | ||
| reference={{wg21|P1073R3}} | | reference={{wg21|P1073R3}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{maybe|1=<span title="no consteval virtual support">10 (partial)*</span>}} | | gcc={{maybe|1=<span title="no consteval virtual support">10 (partial)*</span>}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 318: | Line 316: | ||
| feature=[[cpp/language/namespace|Nested inline namespaces]] | | feature=[[cpp/language/namespace|Nested inline namespaces]] | ||
| reference={{wg21|P1094R2}} | | reference={{wg21|P1094R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 327: | Line 325: | ||
| reference={{wg21|P1141R2}} | | reference={{wg21|P1141R2}} | ||
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
− | | version=c++ | + | | version=c++20-lang |
}} | }} | ||
{{compiler_support_row | {{compiler_support_row | ||
| feature=Signed integers are two's complement | | feature=Signed integers are two's complement | ||
| reference={{wg21|P1236R1}} | | reference={{wg21|P1236R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| clang={{yes|9}} | | clang={{yes|9}} | ||
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
Line 339: | Line 337: | ||
| feature=constexpr {{tt|dynamic_cast}} and polymorphic {{tt|typeid}} | | feature=constexpr {{tt|dynamic_cast}} and polymorphic {{tt|typeid}} | ||
| reference={{wg21|P1327R1}} | | reference={{wg21|P1327R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 347: | Line 345: | ||
| feature=Changing the active member of a union inside constexpr | | feature=Changing the active member of a union inside constexpr | ||
| reference={{wg21|P1330R0}} | | reference={{wg21|P1330R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| msvc={{yes|{{msvc ver|2017}}}} | | msvc={{yes|{{msvc ver|2017}}}} | ||
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
Line 357: | Line 355: | ||
| feature=[[cpp/language/coroutines|Coroutines]] | | feature=[[cpp/language/coroutines|Coroutines]] | ||
| reference={{wg21|P0912R5}} | | reference={{wg21|P0912R5}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{maybe|10 (partial)}} | | gcc={{maybe|10 (partial)}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 365: | Line 363: | ||
| feature=Parenthesized initialization of aggregates | | feature=Parenthesized initialization of aggregates | ||
| reference={{wg21|P0960R3}} | | reference={{wg21|P0960R3}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 372: | Line 370: | ||
| feature=DR: Array size deduction in [[cpp/language/new|new-expressions]] | | feature=DR: Array size deduction in [[cpp/language/new|new-expressions]] | ||
| reference={{wg21|P1009R2}} | | reference={{wg21|P1009R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 379: | Line 377: | ||
| feature=[[cpp/language/modules|Modules]] | | feature=[[cpp/language/modules|Modules]] | ||
| reference={{wg21|P1103R3}} | | reference={{wg21|P1103R3}} | ||
− | | version=c++ | + | | version=c++20-lang |
| clang={{maybe|8 (partial)}} | | clang={{maybe|8 (partial)}} | ||
}} | }} | ||
Line 385: | Line 383: | ||
| feature=Stronger Unicode requirements | | feature=Stronger Unicode requirements | ||
| reference={{wg21|P1041R4}}<br>{{wg21|P1139R2}} | | reference={{wg21|P1041R4}}<br>{{wg21|P1139R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes}} | | clang={{yes}} | ||
Line 393: | Line 391: | ||
| feature={{tt|1=<=> != ==}} | | feature={{tt|1=<=> != ==}} | ||
| reference={{wg21|P1185R2}} | | reference={{wg21|P1185R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| msvc={{yes|{{msvc ver|2019.2}}}} | | msvc={{yes|{{msvc ver|2019.2}}}} | ||
Line 402: | Line 400: | ||
| feature=DR: Explicitly defaulted functions with different exception specifications | | feature=DR: Explicitly defaulted functions with different exception specifications | ||
| reference={{wg21|P1286R2}} | | reference={{wg21|P1286R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 410: | Line 408: | ||
| feature=Lambda capture and storage class specifiers of structured bindings | | feature=Lambda capture and storage class specifiers of structured bindings | ||
| reference={{wg21|P1091R3}}<br>{{wg21|P1381R1}} | | reference={{wg21|P1091R3}}<br>{{wg21|P1381R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| edg={{yes|5.1}} | | edg={{yes|5.1}} | ||
Line 419: | Line 417: | ||
| feature=Permit conversions to arrays of unknown bound | | feature=Permit conversions to arrays of unknown bound | ||
| reference={{wg21|P0388R4}} | | reference={{wg21|P0388R4}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| edg={{yes|6.0}} | | edg={{yes|6.0}} | ||
Line 426: | Line 424: | ||
| feature=constexpr container operations | | feature=constexpr container operations | ||
| reference={{wg21|P0784R7}} | | reference={{wg21|P0784R7}} | ||
− | | version=c++ | + | | version=c++20-lang |
| edg={{yes|6.0}} | | edg={{yes|6.0}} | ||
| clang={{yes|10}} | | clang={{yes|10}} | ||
Line 434: | Line 432: | ||
| feature=Deprecating some uses of {{tt|volatile}} | | feature=Deprecating some uses of {{tt|volatile}} | ||
| reference={{wg21|P1152R4}} | | reference={{wg21|P1152R4}} | ||
− | | version=c++ | + | | version=c++20-lang |
| edg={{yes|6.0}} | | edg={{yes|6.0}} | ||
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
Line 442: | Line 440: | ||
| feature={{ltt|cpp/language/constinit}} | | feature={{ltt|cpp/language/constinit}} | ||
| reference={{wg21|P1143R2}} | | reference={{wg21|P1143R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|10}} | | clang={{yes|10}} | ||
Line 449: | Line 447: | ||
| feature=Deprecate comma operator in subscripts | | feature=Deprecate comma operator in subscripts | ||
| reference={{wg21|P1161R3}} | | reference={{wg21|P1161R3}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 457: | Line 455: | ||
| feature={{attr|nodiscard}} with message | | feature={{attr|nodiscard}} with message | ||
| reference={{wg21|P1301R4}} | | reference={{wg21|P1301R4}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 465: | Line 463: | ||
| feature=Trivial default initialization in constexpr functions | | feature=Trivial default initialization in constexpr functions | ||
| reference={{wg21|P1331R2}} | | reference={{wg21|P1331R2}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|10}} | | clang={{yes|10}} | ||
Line 473: | Line 471: | ||
| feature=Unevaluated asm-declaration in constexpr functions | | feature=Unevaluated asm-declaration in constexpr functions | ||
| reference={{wg21|P1668R1}} | | reference={{wg21|P1668R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|10}} | | clang={{yes|10}} | ||
Line 481: | Line 479: | ||
| feature=using enum | | feature=using enum | ||
| reference={{wg21|P1099R5}} | | reference={{wg21|P1099R5}} | ||
− | | version=c++ | + | | version=c++20-lang |
| msvc={{yes|{{msvc ver|2019.4}}}} | | msvc={{yes|{{msvc ver|2019.4}}}} | ||
}} | }} | ||
Line 487: | Line 485: | ||
| feature=Synthesizing three-way comparison for specified comparison category | | feature=Synthesizing three-way comparison for specified comparison category | ||
| reference={{wg21|P1186R3}} | | reference={{wg21|P1186R3}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| edg={{yes|6.0}} | | edg={{yes|6.0}} | ||
Line 496: | Line 494: | ||
| feature=DR: {{attr/core|nodiscard}} for constructors | | feature=DR: {{attr/core|nodiscard}} for constructors | ||
| reference={{wg21|P1771R1}} | | reference={{wg21|P1771R1}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| edg={{yes|6.0}} | | edg={{yes|6.0}} | ||
Line 505: | Line 503: | ||
| feature=[[cpp/language/class template argument deduction|Class template argument deduction]] for alias templates | | feature=[[cpp/language/class template argument deduction|Class template argument deduction]] for alias templates | ||
| reference={{wg21|P1814R0}} | | reference={{wg21|P1814R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
}} | }} | ||
Line 511: | Line 509: | ||
| feature=Class template argument deduction for aggregates | | feature=Class template argument deduction for aggregates | ||
| reference={{wg21|P1816R0}} | | reference={{wg21|P1816R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
}} | }} | ||
Line 517: | Line 515: | ||
| feature=DR: [[cpp/language/return|Implicit move]] for more local objects and rvalue references | | feature=DR: [[cpp/language/return|Implicit move]] for more local objects and rvalue references | ||
| reference={{wg21|P1825R0}} | | reference={{wg21|P1825R0}} | ||
− | | version=c++ | + | | version=c++20-lang |
| edg={{yes|6.0}} | | edg={{yes|6.0}} | ||
| msvc={{yes|{{msvc ver|2019.4}}}} | | msvc={{yes|{{msvc ver|2019.4}}}} | ||
Line 523: | Line 521: | ||
}} | }} | ||
− | === C++ | + | === C++20 library features === |
− | {{standard library support|std=c++ | + | {{standard library support|std=c++20| |
<!-- 201707 --> | <!-- 201707 --> | ||
{{standard library support row | {{standard library support row | ||
| feature={{ltt|cpp/types/endian|std::endian}} | | feature={{ltt|cpp/types/endian|std::endian}} | ||
| reference={{wg21|P0463R1}} | | reference={{wg21|P0463R1}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|7}} | | clang={{yes|7}} | ||
| gcc={{yes|8}} | | gcc={{yes|8}} | ||
Line 538: | Line 536: | ||
| feature=Extending {{lc|std::make_shared()}} to support arrays | | feature=Extending {{lc|std::make_shared()}} to support arrays | ||
| reference={{wg21|P0674R1}} | | reference={{wg21|P0674R1}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
<!-- 201711 --> | <!-- 201711 --> | ||
Line 544: | Line 542: | ||
| feature=Floating point atomic | | feature=Floating point atomic | ||
| reference={{wg21|P0020R6}} | | reference={{wg21|P0020R6}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| msvc={{yes|{{msvc ver|2019.2}}}} | | msvc={{yes|{{msvc ver|2019.2}}}} | ||
Line 552: | Line 550: | ||
| feature=[[cpp/io/basic_syncbuf|Synchronized buffered]] [[cpp/io/basic_osyncstream|ostream]] | | feature=[[cpp/io/basic_syncbuf|Synchronized buffered]] [[cpp/io/basic_osyncstream|ostream]] | ||
| reference={{wg21|P0053R7}} | | reference={{wg21|P0053R7}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 558: | Line 556: | ||
| feature={{tt|constexpr}} for {{header|algorithm}} and {{header|utility}} | | feature={{tt|constexpr}} for {{header|algorithm}} and {{header|utility}} | ||
| reference={{wg21|P0202R3}} | | reference={{wg21|P0202R3}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{maybe|8 (partial)}} | | clang={{maybe|8 (partial)}} | ||
Line 566: | Line 564: | ||
| feature=More {{tt|constexpr}} for {{header|complex}} | | feature=More {{tt|constexpr}} for {{header|complex}} | ||
| reference={{wg21|P0415R1}} | | reference={{wg21|P0415R1}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{maybe|7 (partial)}} | | clang={{maybe|7 (partial)}} | ||
Line 574: | Line 572: | ||
| feature=Make {{lc|std::memory_order}} a scoped enumeration | | feature=Make {{lc|std::memory_order}} a scoped enumeration | ||
| reference={{wg21|P0439R0}} | | reference={{wg21|P0439R0}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 582: | Line 580: | ||
| feature=[[cpp/string/basic_string|String]] prefix and suffix checking | | feature=[[cpp/string/basic_string|String]] prefix and suffix checking | ||
| reference={{wg21|P0457R2}} | | reference={{wg21|P0457R2}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|6}} | | clang={{yes|6}} | ||
Line 591: | Line 589: | ||
| feature=Library support for {{tt|1=operator<=>}} {{header|compare}} | | feature=Library support for {{tt|1=operator<=>}} {{header|compare}} | ||
| reference={{wg21|P0768R1}} | | reference={{wg21|P0768R1}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{maybe|7 (partial)}} | | clang={{maybe|7 (partial)}} | ||
Line 600: | Line 598: | ||
| feature={{ltt|cpp/types/remove_cvref|std::remove_cvref}} | | feature={{ltt|cpp/types/remove_cvref|std::remove_cvref}} | ||
| reference={{wg21|P0550R2}} | | reference={{wg21|P0550R2}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|6}} | | clang={{yes|6}} | ||
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
Line 609: | Line 607: | ||
| feature={{attr/core|nodiscard}} in the standard library | | feature={{attr/core|nodiscard}} in the standard library | ||
| reference={{wg21|P0600R1}} | | reference={{wg21|P0600R1}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{maybe|7 (partial)}} | | clang={{maybe|7 (partial)}} | ||
Line 618: | Line 616: | ||
| feature=Using {{tt|std::move}} in [[cpp/numeric|numeric algorithms]] | | feature=Using {{tt|std::move}} in [[cpp/numeric|numeric algorithms]] | ||
| reference={{wg21|P0616R0}} | | reference={{wg21|P0616R0}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| msvc={{yes|{{msvc ver|2019.3}}}} | | msvc={{yes|{{msvc ver|2019.3}}}} | ||
Line 626: | Line 624: | ||
| feature=Utility to convert a pointer to a raw pointer | | feature=Utility to convert a pointer to a raw pointer | ||
| reference={{wg21|P0653R2}} | | reference={{wg21|P0653R2}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|6}} | | clang={{yes|6}} | ||
| gcc={{yes|8}} | | gcc={{yes|8}} | ||
Line 635: | Line 633: | ||
| feature=Atomic {{ltt|cpp/memory/shared_ptr/atomic2|std::shared_ptr}} and {{ltt|cpp/memory/weak_ptr/atomic2|std::weak_ptr}} | | feature=Atomic {{ltt|cpp/memory/shared_ptr/atomic2|std::shared_ptr}} and {{ltt|cpp/memory/weak_ptr/atomic2|std::weak_ptr}} | ||
| reference={{wg21|P0718R2}} | | reference={{wg21|P0718R2}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
<!-- 201803 --> | <!-- 201803 --> | ||
Line 641: | Line 639: | ||
| feature={{ltt|cpp/container/span|std::span}} | | feature={{ltt|cpp/container/span|std::span}} | ||
| reference={{wg21|P0122R7}} | | reference={{wg21|P0122R7}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|7}} | | clang={{yes|7}} | ||
Line 649: | Line 647: | ||
| feature=[[cpp/chrono#Calendar|Calendar]] and [[cpp/chrono#Time zone|timezone]] | | feature=[[cpp/chrono#Calendar|Calendar]] and [[cpp/chrono#Time zone|timezone]] | ||
| reference={{wg21|P0355R7}} | | reference={{wg21|P0355R7}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{maybe|7 (partial)}} | | clang={{maybe|7 (partial)}} | ||
}} | }} | ||
Line 656: | Line 654: | ||
| feature={{header|version}} | | feature={{header|version}} | ||
| reference={{wg21|P0754R2}} | | reference={{wg21|P0754R2}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|7}} | | clang={{yes|7}} | ||
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
Line 665: | Line 663: | ||
| feature=Comparing unordered containers | | feature=Comparing unordered containers | ||
| reference={{wg21|P0809R0}} | | reference={{wg21|P0809R0}} | ||
− | | version=c++ | + | | version=c++20 |
| msvc={{yes|{{msvc ver|2010}}}} | | msvc={{yes|{{msvc ver|2010}}}} | ||
}} | }} | ||
Line 672: | Line 670: | ||
| feature={{named req|ConstexprIterator}} requirements | | feature={{named req|ConstexprIterator}} requirements | ||
| reference={{wg21|P0858R0}} | | reference={{wg21|P0858R0}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| msvc={{yes|{{msvc ver|2017.3}}}} | | msvc={{yes|{{msvc ver|2017.3}}}} | ||
Line 680: | Line 678: | ||
| feature={{lc|std::basic_string::reserve()}} should not shrink | | feature={{lc|std::basic_string::reserve()}} should not shrink | ||
| reference={{wg21|P0966R1}} | | reference={{wg21|P0966R1}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|8}} | | clang={{yes|8}} | ||
}} | }} | ||
Line 688: | Line 686: | ||
| reference={{wg21|P0019R8}} | | reference={{wg21|P0019R8}} | ||
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 694: | Line 692: | ||
| feature={{tt|contains()}} member function of associative containers | | feature={{tt|contains()}} member function of associative containers | ||
| reference={{wg21|P0458R2}} | | reference={{wg21|P0458R2}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| msvc={{yes|{{msvc ver|2019.1}}}} | | msvc={{yes|{{msvc ver|2019.1}}}} | ||
Line 702: | Line 700: | ||
| feature=DR: Guaranteed copy elision for [[cpp/memory/scoped_allocator_adaptor/construct|piecewise construction]] | | feature=DR: Guaranteed copy elision for [[cpp/memory/scoped_allocator_adaptor/construct|piecewise construction]] | ||
| reference={{wg21|P0475R1}} | | reference={{wg21|P0475R1}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
}} | }} | ||
Line 709: | Line 707: | ||
| feature={{ltf|cpp/numeric/bit_cast|std::bit_cast}} | | feature={{ltf|cpp/numeric/bit_cast|std::bit_cast}} | ||
| reference={{wg21|P0476R2}} | | reference={{wg21|P0476R2}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 715: | Line 713: | ||
| feature=[[cpp/header/bit|Integral power-of-2 operations]] | | feature=[[cpp/header/bit|Integral power-of-2 operations]] | ||
| reference={{wg21|P0556R3}} | | reference={{wg21|P0556R3}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
}} | }} | ||
Line 722: | Line 720: | ||
| feature=Improving the return value of erase-like algorithms | | feature=Improving the return value of erase-like algorithms | ||
| reference={{wg21|P0646R1}} | | reference={{wg21|P0646R1}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| msvc={{yes|{{msvc ver|2019.1}}}} | | msvc={{yes|{{msvc ver|2019.1}}}} | ||
Line 730: | Line 728: | ||
| feature={{ltt|cpp/memory/new/destroying_delete_t|std::destroying_delete}} | | feature={{ltt|cpp/memory/new/destroying_delete_t|std::destroying_delete}} | ||
| reference={{wg21|P0722R3}} | | reference={{wg21|P0722R3}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 738: | Line 736: | ||
| feature={{ltt|cpp/types/is_convertible|std::is_nothrow_convertible}} | | feature={{ltt|cpp/types/is_convertible|std::is_nothrow_convertible}} | ||
| reference={{wg21|P0758R1}} | | reference={{wg21|P0758R1}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|9}} | | clang={{yes|9}} | ||
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
Line 747: | Line 745: | ||
| feature=Add [[cpp/algorithm/shift|shift]] to {{tt|<algorithm>}} | | feature=Add [[cpp/algorithm/shift|shift]] to {{tt|<algorithm>}} | ||
| reference={{wg21|P0769R2}} | | reference={{wg21|P0769R2}} | ||
− | | version=c++ | + | | version=c++20 |
| msvc={{yes|{{msvc ver|2019.1}}}} | | msvc={{yes|{{msvc ver|2019.1}}}} | ||
}} | }} | ||
Line 754: | Line 752: | ||
| feature=Constexpr for {{lc|std::swap()}} and {{tt|swap}} related functions | | feature=Constexpr for {{lc|std::swap()}} and {{tt|swap}} related functions | ||
| reference={{wg21|P0879R0}} | | reference={{wg21|P0879R0}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
}} | }} | ||
Line 761: | Line 759: | ||
| feature={{ltt|cpp/types/type_identity|std::type_identity}} | | feature={{ltt|cpp/types/type_identity|std::type_identity}} | ||
| reference={{wg21|P0887R1}} | | reference={{wg21|P0887R1}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|8}} | | clang={{yes|8}} | ||
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
Line 770: | Line 768: | ||
| feature=[[cpp/concepts|Concepts library]] | | feature=[[cpp/concepts|Concepts library]] | ||
| reference={{wg21|P0898R3}} | | reference={{wg21|P0898R3}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| msvc={{yes|{{msvc ver|2019.3}}}} | | msvc={{yes|{{msvc ver|2019.3}}}} | ||
Line 778: | Line 776: | ||
| feature={{tt|constexpr}} [[cpp/container/array/operator cmp|comparison operators]] for {{tt|std::array}} | | feature={{tt|constexpr}} [[cpp/container/array/operator cmp|comparison operators]] for {{tt|std::array}} | ||
| reference={{wg21|P1023R0}} | | reference={{wg21|P1023R0}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 786: | Line 784: | ||
| feature=[[cpp/utility/functional/unwrap_reference|{{tt|std::unwrap_ref_decay}} and {{tt|std::unwrap_reference}}]] | | feature=[[cpp/utility/functional/unwrap_reference|{{tt|std::unwrap_ref_decay}} and {{tt|std::unwrap_reference}}]] | ||
| reference={{wg21|P0318R1}} | | reference={{wg21|P0318R1}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 795: | Line 793: | ||
| feature={{ltf|cpp/utility/functional/bind_front|std::bind_front}} | | feature={{ltf|cpp/utility/functional/bind_front|std::bind_front}} | ||
| reference={{wg21|P0356R5}} | | reference={{wg21|P0356R5}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
}} | }} | ||
Line 802: | Line 800: | ||
| feature={{lc|std::reference_wrapper}} for incomplete types | | feature={{lc|std::reference_wrapper}} for incomplete types | ||
| reference={{wg21|P0357R3}} | | reference={{wg21|P0357R3}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|8}} | | clang={{yes|8}} | ||
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
Line 810: | Line 808: | ||
| feature=Fixing {{ltt|cpp/io/basic_istream/operator_gtgt2|operator>>(basic_istream&, CharT*)}} | | feature=Fixing {{ltt|cpp/io/basic_istream/operator_gtgt2|operator>>(basic_istream&, CharT*)}} | ||
| reference={{wg21|P0487R1}} | | reference={{wg21|P0487R1}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|8}} | | clang={{yes|8}} | ||
| msvc={{yes|{{msvc ver|2019.3}}}} | | msvc={{yes|{{msvc ver|2019.3}}}} | ||
Line 818: | Line 816: | ||
| feature=Library support for {{tt|char8_t}} | | feature=Library support for {{tt|char8_t}} | ||
| reference={{wg21|P0482R6}} | | reference={{wg21|P0482R6}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| msvc={{yes|{{msvc ver|2019.2}}}} | | msvc={{yes|{{msvc ver|2019.2}}}} | ||
Line 826: | Line 824: | ||
| feature=[[cpp/memory/uses_allocator_construction_args|Utility functions]] to implement [[cpp/memory/make_obj_using_allocator|uses-allocator]] [[cpp/memory/uninitialized_construct_using_allocator|construction]] | | feature=[[cpp/memory/uses_allocator_construction_args|Utility functions]] to implement [[cpp/memory/make_obj_using_allocator|uses-allocator]] [[cpp/memory/uninitialized_construct_using_allocator|construction]] | ||
| reference={{wg21|P0591R4}} | | reference={{wg21|P0591R4}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
}} | }} | ||
Line 836: | Line 834: | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
| gcc={{yes|8.3}} | | gcc={{yes|8.3}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 842: | Line 840: | ||
| feature=A sane {{lc|std::variant}} converting constructor | | feature=A sane {{lc|std::variant}} converting constructor | ||
| reference={{wg21|P0608R3}} | | reference={{wg21|P0608R3}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 850: | Line 848: | ||
| feature={{lc|std::function}}'s move constructor should be {{tt|noexcept}} | | feature={{lc|std::function}}'s move constructor should be {{tt|noexcept}} | ||
| reference={{wg21|P0771R1}} | | reference={{wg21|P0771R1}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|6}} | | clang={{yes|6}} | ||
| msvc={{yes|{{msvc ver|2019.2}}}} | | msvc={{yes|{{msvc ver|2019.2}}}} | ||
Line 859: | Line 857: | ||
| feature=The [[cpp/iterator|One]] [[cpp/ranges|Ranges]] [[cpp/algorithm/ranges|Proposal]] | | feature=The [[cpp/iterator|One]] [[cpp/ranges|Ranges]] [[cpp/algorithm/ranges|Proposal]] | ||
| reference={{wg21|P0896R4}} | | reference={{wg21|P0896R4}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 865: | Line 863: | ||
| feature=Heterogeneous lookup for unordered containers | | feature=Heterogeneous lookup for unordered containers | ||
| reference={{wg21|P0919R3}} | | reference={{wg21|P0919R3}} | ||
− | | version=c++ | + | | version=c++20 |
| msvc={{yes|{{msvc ver|2019.3}}}} | | msvc={{yes|{{msvc ver|2019.3}}}} | ||
}} | }} | ||
Line 872: | Line 870: | ||
| feature={{header|chrono}} {{tt|zero()}}, {{tt|min()}}, and {{tt|max()}} should be {{tt|noexcept}} | | feature={{header|chrono}} {{tt|zero()}}, {{tt|min()}}, and {{tt|max()}} should be {{tt|noexcept}} | ||
| reference={{wg21|P0972R0}} | | reference={{wg21|P0972R0}} | ||
− | | version=c++ | + | | version=c++20 |
| clang={{yes|8}} | | clang={{yes|8}} | ||
| msvc={{yes|{{msvc ver|2017.7}}}} | | msvc={{yes|{{msvc ver|2017.7}}}} | ||
Line 881: | Line 879: | ||
| feature={{tt|constexpr}} in {{lc|std::pointer_traits}} | | feature={{tt|constexpr}} in {{lc|std::pointer_traits}} | ||
| reference={{wg21|P1006R1}} | | reference={{wg21|P1006R1}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 889: | Line 887: | ||
| feature={{ltf|cpp/memory/assume_aligned|std::assume_aligned}} | | feature={{ltf|cpp/memory/assume_aligned|std::assume_aligned}} | ||
| reference={{wg21|P1007R3}} | | reference={{wg21|P1007R3}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
}} | }} | ||
Line 896: | Line 894: | ||
| feature=Remove comparison operators of {{tt|std::span}} | | feature=Remove comparison operators of {{tt|std::span}} | ||
| reference={{wg21|P1085R2}} | | reference={{wg21|P1085R2}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 904: | Line 902: | ||
| feature=Make stateful allocator propagation more consistent for {{ltt|cpp/string/basic_string/operator+|operator+(basic_string)}} | | feature=Make stateful allocator propagation more consistent for {{ltt|cpp/string/basic_string/operator+|operator+(basic_string)}} | ||
| reference={{wg21|P1165R1}} | | reference={{wg21|P1165R1}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
}} | }} | ||
Line 911: | Line 909: | ||
| feature=[[cpp/container/vector/erase2|Consistent container erasure]] | | feature=[[cpp/container/vector/erase2|Consistent container erasure]] | ||
| reference={{wg21|P1209R0}} | | reference={{wg21|P1209R0}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|8}} | | clang={{yes|8}} | ||
Line 919: | Line 917: | ||
| feature={{ltf|cpp/numeric/lerp|std::lerp}} and {{ltf|cpp/numeric/midpoint|std::midpoint}} | | feature={{ltf|cpp/numeric/lerp|std::lerp}} and {{ltf|cpp/numeric/midpoint|std::midpoint}} | ||
| reference={{wg21|P0811R3}} | | reference={{wg21|P0811R3}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 927: | Line 925: | ||
| feature=Usability enhancements for {{tt|std::span}} | | feature=Usability enhancements for {{tt|std::span}} | ||
| reference={{wg21|P1024R3}} | | reference={{wg21|P1024R3}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 935: | Line 933: | ||
| feature=DR: Make {{ltf|cpp/filesystem/create_directory}} Intuitive | | feature=DR: Make {{ltf|cpp/filesystem/create_directory}} Intuitive | ||
| reference={{wg21|P1164R1}} | | reference={{wg21|P1164R1}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|8.3}} | | gcc={{yes|8.3}} | ||
| msvc={{yes|{{msvc ver|2019}}}} | | msvc={{yes|{{msvc ver|2019}}}} | ||
Line 943: | Line 941: | ||
| feature={{ltf|cpp/iterator/size|std::ssize}} and unsigned extent for {{tt|std::span}} | | feature={{ltf|cpp/iterator/size|std::ssize}} and unsigned extent for {{tt|std::span}} | ||
| reference={{wg21|P1227R2}} | | reference={{wg21|P1227R2}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 951: | Line 949: | ||
| feature=Traits for ([[cpp/types/is_unbounded_array|un]])[[cpp/types/is_bounded_array|bounded]] arrays | | feature=Traits for ([[cpp/types/is_unbounded_array|un]])[[cpp/types/is_bounded_array|bounded]] arrays | ||
| reference={{wg21|P1357R0}} | | reference={{wg21|P1357R0}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 959: | Line 957: | ||
| feature={{ltf|cpp/container/array/to_array|std::to_array}} | | feature={{ltf|cpp/container/array/to_array|std::to_array}} | ||
| reference={{wg21|P0325R4}} | | reference={{wg21|P0325R4}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
}} | }} | ||
Line 966: | Line 964: | ||
| feature=Efficient access to {{lc|std::basic_stringbuf}}’s Buffer | | feature=Efficient access to {{lc|std::basic_stringbuf}}’s Buffer | ||
| reference={{wg21|P0408R7}} | | reference={{wg21|P0408R7}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 972: | Line 970: | ||
| feature=[[cpp/types/is_layout_compatible|Layout]]-[[cpp/types/is_corresponding_member|compatibility]] and [[cpp/types/is_pointer_interconvertible_base_of|pointer]]-[[cpp/types/is_pointer_interconvertible_with_class|interconvertibility]] traits | | feature=[[cpp/types/is_layout_compatible|Layout]]-[[cpp/types/is_corresponding_member|compatibility]] and [[cpp/types/is_pointer_interconvertible_base_of|pointer]]-[[cpp/types/is_pointer_interconvertible_with_class|interconvertibility]] traits | ||
| reference={{wg21|P0466R5}} | | reference={{wg21|P0466R5}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 978: | Line 976: | ||
| feature=[[cpp/numeric|Bit operations]] | | feature=[[cpp/numeric|Bit operations]] | ||
| reference={{wg21|P0553R4}} | | reference={{wg21|P0553R4}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|9}} | | gcc={{yes|9}} | ||
| clang={{yes|9}} | | clang={{yes|9}} | ||
Line 986: | Line 984: | ||
| feature=[[cpp/numeric/constants|Mathematical constants]] | | feature=[[cpp/numeric/constants|Mathematical constants]] | ||
| reference={{wg21|P0631R8}} | | reference={{wg21|P0631R8}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
}} | }} | ||
Line 993: | Line 991: | ||
| feature=[[cpp/utility/format|Text formatting]] | | feature=[[cpp/utility/format|Text formatting]] | ||
| reference={{wg21|P0645R10}} | | reference={{wg21|P0645R10}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 999: | Line 997: | ||
| feature={{ltt|cpp/thread/stop_token|std::stop_token}} and {{ltt|cpp/thread/jthread|std::jthread}} | | feature={{ltt|cpp/thread/stop_token|std::stop_token}} and {{ltt|cpp/thread/jthread|std::jthread}} | ||
| reference={{wg21|P0660R10}} | | reference={{wg21|P0660R10}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
}} | }} | ||
Line 1,006: | Line 1,004: | ||
| feature=constexpr {{lc|std::allocator}} and related utilities | | feature=constexpr {{lc|std::allocator}} and related utilities | ||
| reference={{wg21|P0784R7}} | | reference={{wg21|P0784R7}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
}} | }} | ||
Line 1,013: | Line 1,011: | ||
| feature=constexpr {{lc|std::string}} | | feature=constexpr {{lc|std::string}} | ||
| reference={{wg21|P0980R1}} | | reference={{wg21|P0980R1}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 1,019: | Line 1,017: | ||
| feature=constexpr {{lc|std::vector}} | | feature=constexpr {{lc|std::vector}} | ||
| reference={{wg21|P1004R2}} | | reference={{wg21|P1004R2}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 1,025: | Line 1,023: | ||
| feature=Input [[cpp/ranges|range adaptors]] | | feature=Input [[cpp/ranges|range adaptors]] | ||
| reference={{wg21|P1035R7}} | | reference={{wg21|P1035R7}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 1,031: | Line 1,029: | ||
| feature=constexpr {{lc|std::invoke()}} and related utilities | | feature=constexpr {{lc|std::invoke()}} and related utilities | ||
| reference={{wg21|P1065R2}} | | reference={{wg21|P1065R2}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{yes|10}} | | gcc={{yes|10}} | ||
}} | }} | ||
Line 1,038: | Line 1,036: | ||
| feature=Atomic waiting and notifying, {{ltt|cpp/thread/counting_semaphore|std::counting_semaphore}}, {{ltt|cpp/thread/latch|std::latch}} and {{ltt|cpp/thread/barrier|std::barrier}} | | feature=Atomic waiting and notifying, {{ltt|cpp/thread/counting_semaphore|std::counting_semaphore}}, {{ltt|cpp/thread/latch|std::latch}} and {{ltt|cpp/thread/barrier|std::barrier}} | ||
| reference={{wg21|P1135R6}} | | reference={{wg21|P1135R6}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
Line 1,044: | Line 1,042: | ||
| feature={{ltt|cpp/utility/source_location|std::source_location}} | | feature={{ltt|cpp/utility/source_location|std::source_location}} | ||
| reference={{wg21|P1208R6}} | | reference={{wg21|P1208R6}} | ||
− | | version=c++ | + | | version=c++20 |
| gcc={{maybe|7 (TS only)}} | | gcc={{maybe|7 (TS only)}} | ||
}} | }} | ||
Line 1,051: | Line 1,049: | ||
| feature=Adding {{tt|1=<=>}} to the standard library | | feature=Adding {{tt|1=<=>}} to the standard library | ||
| reference={{wg21|P1614R2}} | | reference={{wg21|P1614R2}} | ||
− | | version=c++ | + | | version=c++20 |
}} | }} | ||
}} | }} |
Revision as of 02:18, 25 February 2020
C++20 core language features
C++20 feature |
Paper(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
IBM XL C++ |
IBM Open XL C++ for AIX |
IBM Open XL C++ for z/OS |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
|
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Allow lambda-capture [=, this]
|
P0409R2 | 8 | 6 | 19.22* |
<span title=" unknown version number">10.0*</span> |
5.1 | ||||||||||
__VA_OPT__
|
P0306R4 P1042R1 |
8 (partial)* | 9 |
<span title=" unknown version number">10.0*</span> |
5.1 | |||||||||||
Designated initializers | P0329R4 | 4.7 (partial)* 8 |
3.0 (partial)* 10 |
19.21* | 5.1 | |||||||||||
template-parameter-list for generic lambdas | P0428R2 | 8 | 9 | 19.22* | 5.1 | |||||||||||
Default member initializers for bit-fields | P0683R1 | 8 | 6 |
<span title=" unknown version number">10.0*</span> |
5.1 | |||||||||||
Initializer list constructors in class template argument deduction | P0702R1 | 8 | 6 | 19.14* | 5.0 | |||||||||||
const&-qualified pointers to members | P0704R1 | 8 | 6 | 19.0 (2015)* |
<span title=" unknown version number">10.0*</span> |
5.1 | ||||||||||
Concepts | P0734R0 | 6 (TS only) 10 |
10 | 19.23* (partial)* | ||||||||||||
Lambdas in unevaluated contexts | P0315R4 | 9 | ||||||||||||||
Three-way comparison operator | P0515R3 | 10 | 8 (partial) 10 |
19.20* | 5.1 | |||||||||||
DR: Simplifying implicit lambda capture | P0588R1 | 8 | 19.24* | 5.1 | ||||||||||||
init-statements for range-based for | P0614R1 | 9 | 8 |
<span title=" unknown version number">11.0*</span> |
6.0 | |||||||||||
Default constructible and assignable stateless lambdas | P0624R2 | 9 | 8 | 19.22* | 5.1 | |||||||||||
const mismatch with defaulted copy constructor | P0641R2 | 9 | 8 | 19.21* (partial) | 5.1 | |||||||||||
Access checking on specializations | P0692R1 | Yes | 8 (partial) | 5.1 | ||||||||||||
ADL and function templates that are not visible | P0846R0 | 9 | 9 | 19.21* | 5.1 | |||||||||||
Less eager instantiation of constexpr functions | P0859R0 | 5.2 (partial)* 9 |
||||||||||||||
Attributes [[likely]] and [[unlikely]]
|
P0479R5 | 9 | 5.1 | |||||||||||||
Make typename more optional
|
P0634R3 | 9 | 5.1 | |||||||||||||
Pack expansion in lambda init-capture | P0780R2 | 9 | 9 | 19.22* | ||||||||||||
Attribute [[no_unique_address]]
|
P0840R2 | 9 | 9 | 5.1 | ||||||||||||
DR: Relaxing the structured bindings customization point finding rules | P0961R1 | 8 | 8 | 19.21* |
<span title=" unknown version number">10.0*</span> |
5.1 | ||||||||||
DR: Relaxing the range-for loop customization point finding rules
|
P0962R1 | 8 | 5.1 | |||||||||||||
DR: Allow structured bindings to accessible members | P0969R0 | 8 | 8 | 19.21* |
<span title=" unknown version number">10.0*</span> |
5.1 | ||||||||||
Destroying operator delete | P0722R3 | 9 | 6 |
<span title=" unknown version number">10.0*</span> |
6.1 | |||||||||||
Class types in non-type template parameters | P0732R2 | 9 | ||||||||||||||
Deprecate implicit capture of this via [=]
|
P0806R2 | 9 | 19.22* | 5.1 | ||||||||||||
explicit(bool) | P0892R2 | 9 | 9 | 19.24* | 5.1 | |||||||||||
Integrating feature-test macros | P0941R2 | 5 | 3.4 | 19.15* (partial) 19.20* |
5.0 | |||||||||||
Prohibit aggregates with user-declared constructors | P1008R1 | 9 | 8 | 19.20* |
<span title=" unknown version number">10.0*</span> |
5.1 | ||||||||||
constexpr virtual function | P1064R0 | 9 | 9 | 5.1 | ||||||||||||
Consistency improvements for comparisons | P1120R0 | 10 | 8 (partial) 10 |
19.22* | 5.1 | |||||||||||
char8_t
|
P0482R6 | 9 | 7 | 19.22* | 5.1 | |||||||||||
std::is_constant_evaluated() | P0595R2 | 9 | 9 | 5.1 | 19.1 | |||||||||||
constexpr try -catch blocks
|
P1002R1 | 9 | 8 |
<span title=" unknown version number">10.0*</span> |
5.1 | |||||||||||
Immediate functions | P1073R3 | 10 (partial)* | 5.1 | |||||||||||||
Nested inline namespaces | P1094R2 | 9 | 8 | 5.1 | ||||||||||||
Yet another approach for constrained declarations | P1141R2 | 10 | ||||||||||||||
Signed integers are two's complement | P1236R1 | 9 | 9 | |||||||||||||
constexpr dynamic_cast and polymorphic typeid
|
P1327R1 | 10 | 9 | 5.1 | ||||||||||||
Changing the active member of a union inside constexpr | P1330R0 | 9 | 9 | 19.10* | 5.1 | |||||||||||
Coroutines | P0912R5 | 10 (partial) | 8 (partial) | 5.1 | ||||||||||||
Parenthesized initialization of aggregates | P0960R3 | 10 | 5.1 | |||||||||||||
DR: Array size deduction in new-expressions | P1009R2 | 9 | 5.1 | |||||||||||||
Modules | P1103R3 | 8 (partial) | ||||||||||||||
Stronger Unicode requirements | P1041R4 P1139R2 |
10 | Yes | N/A | ||||||||||||
<=> != ==
|
P1185R2 | 10 | 10 | 19.22* | 5.1 | |||||||||||
DR: Explicitly defaulted functions with different exception specifications | P1286R2 | 10 | 9 | 5.1 | ||||||||||||
Lambda capture and storage class specifiers of structured bindings | P1091R3 P1381R1 |
10 | 8 (partial) | 5.1 | ||||||||||||
Permit conversions to arrays of unknown bound | P0388R4 | 10 | 6.0 | |||||||||||||
constexpr container operations | P0784R7 | 10 | 10 | 6.0 | ||||||||||||
Deprecating some uses of volatile
|
P1152R4 | 10 | 10 | 6.0 | ||||||||||||
constinit | P1143R2 | 10 | 10 | |||||||||||||
Deprecate comma operator in subscripts | P1161R3 | 10 | 9 | 6.0 | ||||||||||||
[[nodiscard]] with message
|
P1301R4 | 10 | 9 | 6.0 | ||||||||||||
Trivial default initialization in constexpr functions | P1331R2 | 10 | 10 | 6.0 | ||||||||||||
Unevaluated asm-declaration in constexpr functions | P1668R1 | 10 | 10 | 6.1 | ||||||||||||
using enum | P1099R5 | 19.24* | ||||||||||||||
Synthesizing three-way comparison for specified comparison category | P1186R3 | 10 | 10 | 19.24* | 6.0 | |||||||||||
DR: [[nodiscard]] for constructors
|
P1771R1 | 10 | 9 | 19.24* | 6.0 | |||||||||||
Class template argument deduction for alias templates | P1814R0 | 10 | ||||||||||||||
Class template argument deduction for aggregates | P1816R0 | 10 | ||||||||||||||
DR: Implicit move for more local objects and rvalue references | P1825R0 | 19.24* | 6.0 | |||||||||||||
C++20 feature |
Paper(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
IBM XL C++ |
IBM Open XL C++ for AIX |
IBM Open XL C++ for z/OS |
Sun/Oracle C++ |
Embarcadero C++ Builder |
Cray |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
C++20 library features
C++20 feature |
Paper(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ for AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* |
|
---|---|---|---|---|---|---|---|---|---|
std::endian | P0463R1 | 8 | 7 | 19.22* |
| ||||
Extending std::make_shared() to support arrays | P0674R1 | ||||||||
Floating point atomic | P0020R6 | 10 | 19.22* |
| |||||
Synchronized buffered ostream | P0053R7 |
| |||||||
constexpr for <algorithm> and <utility>
|
P0202R3 | 10 | 8 (partial) |
| |||||
More constexpr for <complex>
|
P0415R1 | 9 | 7 (partial) |
| |||||
Make std::memory_order a scoped enumeration | P0439R0 | 9 | 9 |
| |||||
String prefix and suffix checking | P0457R2 | 9 | 6 | 19.21* |
| ||||
Library support for operator<=> <compare>
|
P0768R1 | 10 | 7 (partial) | 19.20* (partial) |
| ||||
std::remove_cvref | P0550R2 | 9 | 6 | 19.20* |
| ||||
[[nodiscard]] in the standard library
|
P0600R1 | 9 | 7 (partial) | 19.13* (partial) 19.22* |
| ||||
Using std::move in numeric algorithms
|
P0616R0 | 9 | 19.23* |
| |||||
Utility to convert a pointer to a raw pointer | P0653R2 | 8 | 6 | 19.22* |
| ||||
Atomic std::shared_ptr and std::weak_ptr | P0718R2 | ||||||||
std::span | P0122R7 | 10 | 7 |
| |||||
Calendar and timezone | P0355R7 | 7 (partial) |
| ||||||
<version> | P0754R2 | 9 | 7 | 19.22* |
| ||||
Comparing unordered containers | P0809R0 | 16.0* |
| ||||||
ConstexprIterator requirements | P0858R0 | 9 | 19.11* |
| |||||
std::basic_string::reserve() should not shrink | P0966R1 | 8 | |||||||
std::atomic_ref | P0019R8 | 10 |
| ||||||
contains() member function of associative containers
|
P0458R2 | 9 | 19.21* |
| |||||
DR: Guaranteed copy elision for piecewise construction | P0475R1 | 9 |
| ||||||
std::bit_cast() | P0476R2 |
| |||||||
Integral power-of-2 operations | P0556R3 | 9 |
| ||||||
Improving the return value of erase-like algorithms | P0646R1 | 9 | 19.21* |
| |||||
std::destroying_delete | P0722R3 | 9 | 9 |
| |||||
std::is_nothrow_convertible | P0758R1 | 9 | 9 | 19.23* |
| ||||
Add shift to <algorithm>
|
P0769R2 | 19.21* |
| ||||||
Constexpr for std::swap() and swap related functions
|
P0879R0 | 10 |
| ||||||
std::type_identity | P0887R1 | 9 | 8 | 19.21* |
| ||||
Concepts library | P0898R3 | 10 | 19.23* |
| |||||
constexpr comparison operators for std::array
|
P1023R0 | 10 | 8 | ||||||
std::unwrap_ref_decay and std::unwrap_reference
|
P0318R1 | 9 | 8 | 19.21* |
| ||||
std::bind_front() | P0356R5 | 9 |
| ||||||
std::reference_wrapper for incomplete types | P0357R3 | 9 | 8 |
| |||||
Fixing operator>>(basic_istream&, CharT*) | P0487R1 | 8 | 19.23* |
| |||||
Library support for char8_t
|
P0482R6 | 9 | 19.22* |
| |||||
Utility functions to implement uses-allocator construction | P0591R4 | 9 |
| ||||||
DR: std::variant and std::optional should propagate copy/move triviality | P0602R4 | 8.3 | 8 | 19.11* |
| ||||
A sane std::variant converting constructor | P0608R3 | 10 | 9 |
| |||||
std::function's move constructor should be noexcept
|
P0771R1 | 7.2 | 6 | 19.22* |
| ||||
The One Ranges Proposal | P0896R4 |
| |||||||
Heterogeneous lookup for unordered containers | P0919R3 | 19.23* |
| ||||||
<chrono> zero() , min() , and max() should be noexcept
|
P0972R0 | 9 | 8 | 19.14* |
| ||||
constexpr in std::pointer_traits
|
P1006R1 | 9 | 8 |
| |||||
std::assume_aligned() | P1007R3 | 9 |
| ||||||
Remove comparison operators of std::span
|
P1085R2 | 10 | 8 |
| |||||
Make stateful allocator propagation more consistent for operator+(basic_string) | P1165R1 | 10 |
| ||||||
Consistent container erasure | P1209R0 | 9 | 8 | ||||||
std::lerp() and std::midpoint() | P0811R3 | 9 | 9 |
| |||||
Usability enhancements for std::span
|
P1024R3 | 10 | 9 |
| |||||
DR: Make create_directory() Intuitive | P1164R1 | 8.3 | 19.20* |
| |||||
std::ssize() and unsigned extent for std::span
|
P1227R2 | 10 | 9 |
| |||||
Traits for (un)bounded arrays | P1357R0 | 9 | 9 | ||||||
std::to_array() | P0325R4 | 10 |
| ||||||
Efficient access to std::basic_stringbuf’s Buffer | P0408R7 |
| |||||||
Layout-compatibility and pointer-interconvertibility traits | P0466R5 |
| |||||||
Bit operations | P0553R4 | 9 | 9 |
| |||||
Mathematical constants | P0631R8 | 10 |
| ||||||
Text formatting | P0645R10 |
| |||||||
std::stop_token and std::jthread | P0660R10 | 10 |
| ||||||
constexpr std::allocator and related utilities | P0784R7 | 10 |
| ||||||
constexpr std::string | P0980R1 |
| |||||||
constexpr std::vector | P1004R2 |
| |||||||
Input range adaptors | P1035R7 |
| |||||||
constexpr std::invoke() and related utilities | P1065R2 | 10 |
| ||||||
Atomic waiting and notifying, std::counting_semaphore, std::latch and std::barrier | P1135R6 |
| |||||||
std::source_location | P1208R6 | 7 (TS only) |
| ||||||
Adding <=> to the standard library
|
P1614R2 | ||||||||
C++20 feature |
Paper(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ for AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* |