Namespaces
Variants
Views
Actions

Difference between revisions of "Template:cpp/compiler support/20"

From cppreference.com
m (C++20 library features: fmt)
(Mark P0859R0 as complete for MSVC, more info: https://github.com/MicrosoftDocs/cpp-docs/pull/5101#issuecomment-2352012331)
 
(41 intermediate revisions by 11 users not shown)
Line 1: Line 1:
 
===C++20 core language features===
 
===C++20 core language features===
 
{{compiler support|std=c++20|
 
{{compiler support|std=c++20|
<!-- 201703 -->
+
<!--201703-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Allow {{ls|cpp/language/lambda|Lambda capture}} {{tt|1=[=, this]}}
+
|feature=Allow {{ls|cpp/language/lambda#Lambda capture}} {{tt|1=[=, this]}}
| reference={{wg21|P0409R2}}
+
|reference={{wg21|P0409R2}}
| version=c++20-lang
+
|version=c++20
| clang={{yes|6}}
+
|clang={{yes|6}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
<!-- 201707 -->
+
<!--201707-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=[[cpp/preprocessor/replace#Function-like macros|{{tt|__VA_OPT__}}]]
+
|feature=[[cpp/preprocessor/replace#Function-like macros|{{tt|__VA_OPT__}}]]
| reference={{wg21|P0306R4}}<br>{{wg21|P1042R1}}
+
|reference={{wg21|P0306R4}}<br>{{wg21|P1042R1}}
| version=c++20-lang
+
|version=c++20
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| gcc={{yes|{{popup|no #__VA_OPT__ support|8 (partial)}}<br>{{popup|no placemarker token handling changes|10 (partial)}}<br>12}}
+
|gcc={{yes|{{popup|no #__VA_OPT__ support|8 (partial)}}<br>{{popup|no placemarker token handling changes|10 (partial)}}<br>12}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{ls|cpp/language/aggregate initialization|Designated initializers}}
+
|feature={{ls|cpp/language/aggregate initialization#Designated initializers}}
| reference={{wg21|P0329R4}}
+
|reference={{wg21|P0329R4}}
| version=c++20-lang
+
|version=c++20
| clang={{yes|{{popup|Full C99 compatible superset of P0329, missing brace initializers|3.0 (partial)}}<br>10}}
+
|clang={{yes|{{popup|Full C99 compatible superset of P0329, missing brace initializers|3.0 (partial)}}<br>10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| gcc={{yes|{{popup|As non-standard extension that formed the basis for P0329, missing brace initializers|4.7 (partial)}}<br>8}}
+
|gcc={{yes|{{popup|As non-standard extension that formed the basis for P0329, missing brace initializers|4.7 (partial)}}<br>8}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=[[cpp/language/lambda#Syntax|template-parameter-list for generic lambdas]]
+
|feature=[[cpp/language/lambda#Syntax|template-parameter-list for generic lambdas]]
| reference={{wg21|P0428R2}}
+
|reference={{wg21|P0428R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.0}}}}
+
|aclang={{yes|{{aclang ver|11.0.0}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=[[cpp/language/bit field#Cpp20 Default member initializers for bit fields|Default member initializers for bit-fields]]
+
|feature=[[cpp/language/bit field#Cpp20 Default member initializers for bit fields|Default member initializers for bit-fields]]
| reference={{wg21|P0683R1}}
+
|reference={{wg21|P0683R1}}
| version=c++20-lang
+
|version=c++20
| clang={{yes|6}}
+
|clang={{yes|6}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| 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++20-lang
+
|version=c++20
| clang={{yes|6}}
+
|clang={{yes|6}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{tt|const&}}-qualified pointers to members
+
|feature={{tt|const&}}-qualified pointers to members
| reference={{wg21|P0704R1}}
+
|reference={{wg21|P0704R1}}
| version=c++20-lang
+
|version=c++20
| clang={{yes|6}}
+
|clang={{yes|6}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{yes|{{msvc ver|2015}}}}
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=[[cpp/language/constraints|Concepts]]
+
|feature=[[cpp/language/constraints|Concepts]]
| reference={{wg21|P0734R0}}
+
|reference={{wg21|P0734R0}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|6<br>(TS only)<br>10}}
+
|gcc={{yes|6<br>(TS only)<br>10}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{maybe|{{aclang ver|12.0.0}} (partial)}}
+
|aclang={{maybe|{{aclang ver|12.0.0}} (partial)}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| icc={{no|was supported in 2021.6, removed in 2021.7}}
+
|icc={{yes|{{popup|was supported in 2021.6, removed in 2021.7|2023.1}}}}
| msvc={{yes|{{msvc ver|2019.3}} {{popup|no requires-expression support|(partial)}}<br>{{msvc ver|19.30}}}}
+
|msvc={{yes|{{msvc ver|2019.3}} {{popup|no requires-expression support|(partial)}}<br>{{msvc ver|19.30}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
<!-- 201711 -->
+
<!--201711-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{ls|cpp/language/lambda|Lambdas in unevaluated contexts}}
+
|feature={{ls|cpp/language/lambda#Lambdas in unevaluated contexts}}
| reference={{wg21|P0315R4}}
+
|reference={{wg21|P0315R4}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| edg={{yes|6.2}}
+
|edg={{yes|6.2}}
| clang={{maybe|{{popup|temp.deduct p9 missing|13 (partial)}}<br>{{popup|temp.over.link changes|14 (partial)}}}}
+
|icc={{yes|2023.1 (partial)<br>2024.0}}
| aclang={{maybe|{{aclang ver|13.1.6}} (partial)}}
+
|clang={{yes|{{popup|temp.deduct p9 missing|13 (partial)}}<br>{{popup|temp.over.link changes|14 (partial)}}<br>17}}
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|aclang={{maybe|{{aclang ver|13.1.6}} (partial)}}
| nvcc={{yes|12.0}}
+
|msvc={{yes|{{msvc ver|2019.8}}}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{ls|cpp/language/operator comparison|Three-way comparison}} operator
+
|feature={{ls|cpp/language/operator comparison#Three-way comparison}} operator
| reference={{wg21|P0515R3}}
+
|reference={{wg21|P0515R3}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019}}}}
+
|msvc={{yes|{{msvc ver|2019}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| clang={{yes|8 (partial)<br>10}}
+
|clang={{yes|8 (partial)<br>10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=DR: Simplifying implicit lambda capture
+
|feature=DR11: Simplifying implicit lambda capture
| reference={{wg21|P0588R1}}
+
|reference={{wg21|P0588R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.4}}}}
+
|msvc={{yes|{{msvc ver|2019.4}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=[[cpp/language/range-for#Syntax|init-statements for range-based for]]
+
|feature=[[cpp/language/range-for#Syntax|init-statements for range-based for]]
| reference={{wg21|P0614R1}}
+
|reference={{wg21|P0614R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| edg={{yes|6.0}}
+
|edg={{yes|6.0}}
| aclang={{yes|{{aclang ver|11.0.0}}}}
+
|aclang={{yes|{{aclang ver|11.0.0}}}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Default constructible and assignable stateless {{lt|cpp/language/lambda}}s
+
|feature=Default constructible and assignable stateless {{lt|cpp/language/lambda}}s
| reference={{wg21|P0624R2}}
+
|reference={{wg21|P0624R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{tt|const}} mismatch with defaulted copy constructor
+
|feature=Type mismatch of defaulted special member functions
| reference={{wg21|P0641R2}}
+
|reference={{wg21|P0641R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{maybe|9 {{popup|only addition of const to copy functions is supported<!-- https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102357 -->|(partial)}}}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{maybe|{{msvc ver|2015}} {{popup|only addition of const to copy functions is supported<!-- https://developercommunity.visualstudio.com/t/10573291 -->|(partial)}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Access checking on specializations
+
|feature=Access checking on specializations
| reference={{wg21|P0692R1}}
+
|reference={{wg21|P0692R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes}}
+
|gcc={{yes}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| clang={{yes|8 (partial)<br>14}}
+
|clang={{yes|8 (partial)<br>14}}
| aclang={{yes|{{aclang ver|14.0.0}}}}
+
|aclang={{yes|{{aclang ver|14.0.0}}}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| 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++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=DR: Specify when {{tt|constexpr}} function definitions are [[cpp/language/constant expression#Functions and variables needed for constant evaluation|needed for constant evaluation]]
+
|feature=DR11: Specify when {{tt|constexpr}} function definitions are [[cpp/language/constant expression#Functions and variables needed for constant evaluation|needed for constant evaluation]]
| reference={{wg21|P0859R0}}
+
|reference={{wg21|P0859R0}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|{{popup|mostly|5.2 (partial)}}<br>9}}
+
|gcc={{yes|{{popup|mostly|5.2 (partial)}}<br>9}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.0}}}}
+
|aclang={{yes|{{aclang ver|11.0.0}}}}
| msvc={{yes|{{popup|The implementation is sufficient to support the C++20 Standard Library.|{{msvc ver|2019.7}} (partial)}}<br>{{msvc ver|19.31}}}}
+
|msvc={{yes|{{popup|The implementation is sufficient to support the C++20 Standard Library.|{{msvc ver|2019.7}} (partial)}}<br>{{popup|No feature-test macro.|{{msvc ver|2022.1}}}}}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
<!-- 201803 -->
+
<!--201803-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Attributes {{attr|likely}} and {{attr|likely|unlikely}}
+
|feature=Attributes {{attr|likely}} and {{attr|likely|unlikely}}
| reference={{wg21|P0479R5}}
+
|reference={{wg21|P0479R5}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
| clang={{yes|12}}
+
|clang={{yes|12}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Make {{ltt|cpp/keywords/typename}} more optional
+
|feature=Make {{ltt|cpp/keywords/typename}} more optional
| reference={{wg21|P0634R3}}
+
|reference={{wg21|P0634R3}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|16}}
+
|clang={{yes|16}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| pgi={{yes|20.7}}
+
|icc={{yes|2023.1}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{ltt|cpp/language/parameter pack|Pack-expansions}} in {{ls|cpp/language/lambda|Lambda capture|lambda init-captures}}
+
|feature={{ltt|cpp/language/parameter pack|Pack-expansions}} in [[cpp/language/lambda#Lambda capture|lambda init-captures]]
| reference={{wg21|P0780R2}}
+
|reference={{wg21|P0780R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Attribute {{attr|no_unique_address}}
+
|feature=Attribute {{attr|no_unique_address}}
| reference={{wg21|P0840R2}}
+
|reference={{wg21|P0840R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.9}}}}{{popup|Implemented means parsed because it's considered ABI breaking because previously the compiler could accept it without errors. Also MSVC has an attribute: [[msvc::no_unique_address]]}}
+
|msvc={{yes|{{msvc ver|2019.9}}}}{{popup|Implemented means parsed because it's considered ABI breaking because previously the compiler could accept it without errors. Also MSVC has an attribute: [[msvc::no_unique_address]]}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Conditionally Trivial Special Member Functions
+
|feature=Conditionally Trivial Special Member Functions
| reference={{wg21|P0848R3}}
+
|reference={{wg21|P0848R3}}
| version=c++20-lang
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.8}}}}
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| clang={{yes|16}}
+
|clang={{yes|16}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=DR: Relaxing the {{lt|cpp/language/structured binding}}s customization point finding rules
+
|feature=DR17: Relaxing the {{lt|cpp/language/structured binding}}s customization point finding rules
| reference={{wg21|P0961R1}}
+
|reference={{wg21|P0961R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=DR: Relaxing the {{lt|cpp/language/range-for}} loop customization point finding rules
+
|feature=DR11: Relaxing the {{lt|cpp/language/range-for}} loop customization point finding rules
| reference={{wg21|P0962R1}}
+
|reference={{wg21|P0962R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.0}}}}
+
|aclang={{yes|{{aclang ver|11.0.0}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=DR: Allow structured bindings to accessible members
+
|feature=DR17: Allow structured bindings to accessible members
| reference={{wg21|P0969R0}}
+
|reference={{wg21|P0969R0}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
<!-- 201806 -->
+
<!--201806-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=[[cpp/memory/new/operator delete|Destroying {{tt|operator delete}}]]
+
|feature=[[cpp/memory/new/operator delete|Destroying {{tt|operator delete}}]]
| reference={{wg21|P0722R3}}
+
|reference={{wg21|P0722R3}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|6}}
+
|clang={{yes|6}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|icc={{yes|2023.1}}
| pgi={{yes|20.11}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| nvcc={{yes|12.0}}
+
|pgi={{yes|20.11}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Class types in {{ls|cpp/language/template parameters|Non-type template parameter}}s
+
|feature=Class types in {{ls|cpp/language/template parameters#Non-type template parameter}}s
| reference={{wg21|P0732R2}}
+
|reference={{wg21|P0732R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{maybe|12 (partial)}}
+
|clang={{maybe|12 (partial)}}
| aclang={{maybe|{{aclang ver|13.0.0}} (partial)}}
+
|aclang={{maybe|{{aclang ver|13.0.0}} (partial)}}
| msvc={{yes|{{popup|no proposed changes for User-defined Literals|{{msvc ver|2019.6}}(partial)}}<br>{{msvc ver|2019.9}}}}
+
|msvc={{yes|{{popup|no proposed changes for User-defined Literals|{{msvc ver|2019.6}}(partial)}}<br>{{msvc ver|2019.9}}}}
| edg={{yes|6.2}}
+
|edg={{yes|6.2}}
| nvcc={{yes|12.0}}
+
|icc={{maybe|2023.1 (partial)}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Deprecate implicit [[cpp/language/lambda#Lambda capture|capture]] of {{tt|this}} via {{tt|1=[=]}}
+
|feature=Deprecate implicit [[cpp/language/lambda#Lambda capture|capture]] of {{tt|this}} via {{tt|1=[=]}}
| reference={{wg21|P0806R2}}
+
|reference={{wg21|P0806R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|7}}
+
|clang={{yes|7}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{ltt|cpp/language/explicit|explicit(bool)}}
+
|feature={{ltt|cpp/language/explicit|explicit(bool)}}
| reference={{wg21|P0892R2}}
+
|reference={{wg21|P0892R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.4}}}}
+
|msvc={{yes|{{msvc ver|2019.4}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Integrating [[cpp/feature_test|feature-test macros]]
+
|feature=Integrating [[cpp/feature_test|feature-test macros]]
| reference={{wg21|P0941R2}}
+
|reference={{wg21|P0941R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|5}}
+
|gcc={{yes|5}}
| clang={{yes|3.4}}
+
|clang={{yes|3.4}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.8}} (partial)<br>{{msvc ver|2019}}}}
+
|msvc={{yes|{{msvc ver|2017.8}} (partial)<br>{{msvc ver|2019}}}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Prohibit aggregates with user-declared constructors
+
|feature=Prohibit aggregates with user-declared constructors
| reference={{wg21|P1008R1}}
+
|reference={{wg21|P1008R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| msvc={{yes|{{msvc ver|2019}}}}
+
|msvc={{yes|{{msvc ver|2019}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{tt|constexpr}} [[cpp/language/virtual|virtual function]]
+
|feature={{tt|constexpr}} [[cpp/language/virtual|virtual function]]
| reference={{wg21|P1064R0}}
+
|reference={{wg21|P1064R0}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.9}}}}
+
|msvc={{yes|{{msvc ver|2019.9}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Consistency improvements for comparisons
+
|feature=Consistency improvements for comparisons
| reference={{wg21|P1120R0}}
+
|reference={{wg21|P1120R0}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|8 (partial)<br>10}}
+
|clang={{yes|8 (partial)<br>10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| pgi={{yes|20.7}}
+
|icc={{yes|2023.1}}
| nvcc={{yes|12.0}}
+
|pgi={{yes|20.7}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
<!-- 201811 -->
+
<!--201811-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{tt|{{ls|cpp/language/types|char8_t}}}}
+
|feature={{tt|{{ls|cpp/language/types#char8_t}}}}
| reference={{wg21|P0482R6}}
+
|reference={{wg21|P0482R6}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|{{popup|Prior to Clang 8, this feature is not enabled by -std{{=}}c++20, but can be enabled with -fchar8_t|7}}}}
+
|clang={{yes|{{popup|Prior to Clang 8, this feature is not enabled by -std{{=}}c++20, but can be enabled with -fchar8_t|7}}}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{ltf std|cpp/types/is_constant_evaluated}}
+
|feature={{ltf std|cpp/types/is_constant_evaluated}}
| reference={{wg21|P0595R2}}
+
|reference={{wg21|P0595R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| icc={{yes|19.1}}
+
|icc={{yes|19.1}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{tt|constexpr}} {{tt|try}}-{{tt|catch}} blocks
+
|feature={{tt|constexpr}} {{tt|try}}-{{tt|catch}} blocks
| reference={{wg21|P1002R1}}
+
|reference={{wg21|P1002R1}}
| version=c++20-lang
+
|version=c++20
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|icc={{yes|2023.1}}
| pgi={{yes|20.7}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| nvcc={{yes|12.0}}
+
|pgi={{yes|20.7}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/consteval|Immediate functions]] ({{tt|consteval}})
+
|feature=[[cpp/language/consteval|Immediate functions]] ({{tt|consteval}})
| reference={{wg21|P1073R3}}
+
|reference={{wg21|P1073R3}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|{{popup|no consteval virtual support|10 (partial)}}<br>11}}
+
|gcc={{yes|{{popup|no consteval virtual support|10 (partial)}}<br>11}}
| clang={{maybe|11 (partial)<br>{{popup|P1937R2 implemented|14 (partial)}}}}
+
|clang={{yes|11 (partial)<br>{{popup|P1937R2 implemented|14 (partial)}}<br>17}}
| aclang={{maybe|{{aclang ver|11.0.3}} (partial)}}
+
|aclang={{yes|{{aclang ver|11.0.3}} (partial)<br>{{aclang ver|15.0.0}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{popup|no constant-folding immediate invocations|{{msvc ver|2019.8}}<br>(partial)}}<br>{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{popup|no constant-folding immediate invocations|{{msvc ver|2019.8}}<br>(partial)}}<br>{{msvc ver|2019.X}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/namespace|Nested inline namespaces]]
+
|feature=[[cpp/language/namespace|Nested inline namespaces]]
| reference={{wg21|P1094R2}}
+
|reference={{wg21|P1094R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Yet another approach for [[cpp/language/template_parameters#Type template parameter|constrained]] [[cpp/language/auto|declarations]]
+
|feature=Yet another approach for [[cpp/language/template_parameters#Type template parameter|constrained]] [[cpp/language/auto|declarations]]
| reference={{wg21|P1141R2}}
+
|reference={{wg21|P1141R2}}
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| version=c++20-lang
+
|icc={{yes|2023.1}}
| msvc={{yes|{{msvc ver|2019.6}} (partial)<br>{{msvc ver|2019.9}}}}
+
|version=c++20
| clang={{yes|10}}
+
|msvc={{yes|{{msvc ver|2019.6}} (partial)<br>{{msvc ver|2019.9}}}}
| cray={{yes|11.0}}
+
|clang={{yes|10}}
| aclang={{yes|{{aclang ver|12.0.5}}}}
+
|cray={{yes|11.0}}
| pgi={{yes|20.11}}
+
|aclang={{yes|{{aclang ver|12.0.5}}}}
| nvcc={{yes|12.0}}
+
|pgi={{yes|20.11}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{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++20-lang
+
|version=c++20
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| edg={{n/a}}
+
|edg={{n/a}}
| icc={{n/a}}
+
|icc={{yes|{{popup|N/A up to 2021|2023.1}}}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes}}
+
|msvc={{yes}}
| pgi={{yes|{{popup|signed integers have always been two's complement|yes}}}}
+
|pgi={{yes|{{popup|signed integers have always been two's complement|yes}}}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{ltt|cpp/language/dynamic_cast|dynamic_cast}} and polymorphic {{ltt|cpp/language/typeid|typeid}} in {{lt|cpp/language/constant expression}}s
+
|feature={{ltt|cpp/language/dynamic_cast|dynamic_cast}} and polymorphic {{ltt|cpp/language/typeid|typeid}} in {{lt|cpp/language/constant expression}}s
| reference={{wg21|P1327R1}}
+
|reference={{wg21|P1327R1}}
| version=c++20-lang
+
|version=c++20
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Changing the active member of a union inside {{tt|constexpr}}
+
|feature=Changing the active member of a union inside {{tt|constexpr}}
| reference={{wg21|P1330R0}}
+
|reference={{wg21|P1330R0}}
| version=c++20-lang
+
|version=c++20
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
<!-- 201902 -->
+
<!--201902-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=[[cpp/language/coroutines|Coroutines]]
+
|feature=[[cpp/language/coroutines|Coroutines]]
| reference={{wg21|P0912R5}}
+
|reference={{wg21|P0912R5}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| clang={{maybe|8 (partial)}}
+
|clang={{maybe|8 (partial)<br>{{popup|Fully supported on all targets except Windows, which still has some stability and ABI issues.|17 (partial)}}}}
| aclang={{maybe|{{aclang ver|10.0.1}} (partial)}}
+
|aclang={{maybe|{{aclang ver|10.0.1}} (partial)}}
| msvc={{yes|{{msvc ver|2015}} (partial)<br>{{msvc ver|2017}} (TS only)<br>{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2015}} (partial)<br>{{msvc ver|2017}} (TS only)<br>{{msvc ver|2019.8}}}}
| nvcc={{yes|12.0 (host code only)}}
+
|nvcc={{yes|12.0 (host code only)}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Parenthesized [[cpp/language/aggregate_initialization|initialization of aggregates]]
+
|feature=Parenthesized [[cpp/language/aggregate_initialization|initialization of aggregates]]
| reference={{wg21|P0960R3}}
+
|reference={{wg21|P0960R3}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|16}}
+
|clang={{yes|16}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.8}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=DR: Array size deduction in [[cpp/language/new|{{tt|new}}-expressions]]
+
|feature=DR11: Array size deduction in [[cpp/language/new|{{tt|new}}-expressions]]
| reference={{wg21|P1009R2}}
+
|reference={{wg21|P1009R2}}
| version=c++20-lang
+
|version=c++20
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=[[cpp/language/modules|Modules]]
+
|feature=[[cpp/language/modules|Modules]]
| reference={{wg21|P1103R3}}
+
|reference={{wg21|P1103R3}}
| version=c++20-lang
+
|version=c++20
| gcc={{maybe|11 (partial)}}
+
|gcc={{maybe|11 (partial)}}
| clang={{maybe|8 (partial)}}
+
|icc={{maybe|2023.1 (partial)}}
| aclang={{maybe|{{aclang ver|10.0.1}} (partial)}}
+
|clang={{maybe|8 (partial)}}
| msvc={{yes|{{msvc ver|2015}} (partial)<br>{{msvc ver|2017}} (TS only)<br>{{msvc ver|2019.8}}}}
+
|aclang={{maybe|{{aclang ver|10.0.1}} (partial)}}
<!--| nvcc={{no}} -->
+
|msvc={{yes|{{msvc ver|2015}} (partial)<br>{{msvc ver|2017}} (TS only)<br>{{msvc ver|2019.8}}}}
}} <!-- See P1502 row for stdlib header units -->
+
<!--|nvcc={{no}}-->
 +
}}<!--See P1502 row for stdlib header units-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Stronger Unicode requirements
+
|feature=Stronger Unicode requirements
| reference={{wg21|P1041R4}}<br>{{wg21|P1139R2}}
+
|reference={{wg21|P1041R4}}<br>{{wg21|P1139R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes}}
+
|clang={{yes}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes}}
+
|aclang={{yes}}
| edg={{n/a}}
+
|edg={{n/a}}
| msvc={{yes|{{msvc ver|2015}} (P1041R4)<br>{{msvc ver|2019.6}} (P1139R2)}}
+
|icc={{yes|{{popup|N/A up to 2021|2023.1}}}}
| nvcc={{yes|12.0}}
+
|msvc={{yes|{{msvc ver|2015}} (P1041R4)<br>{{msvc ver|2019.6}} (P1139R2)}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{tt|1=<=> != ==}}
+
|feature={{tt|1=<=> != ==}}
| reference={{wg21|P1185R2}}
+
|reference={{wg21|P1185R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=DR: Explicitly defaulted functions with different exception specifications
+
|feature=DR11: Explicitly defaulted functions with different exception specifications
| reference={{wg21|P1286R2}}
+
|reference={{wg21|P1286R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.8}}}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| 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++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| edg={{yes|5.1}}
+
|edg={{yes|5.1}}
| icc={{yes|2021.1}}
+
|icc={{yes|2021.1}}
| clang={{maybe|8 (partial)}}
+
|clang={{maybe|8 (partial)}}
| clang={{yes|8 (partial)<br>16}}
+
|clang={{yes|8 (partial)<br>16}}
| aclang={{maybe|{{aclang ver|10.0.1}} (partial)}}
+
|aclang={{maybe|{{aclang ver|10.0.1}} (partial)}}
| msvc={{yes|{{msvc ver|2017.3}}(P1381R1)<br>{{msvc ver|2019.4}}(P1091R3)}}
+
|msvc={{yes|{{msvc ver|2017.3}}(P1381R1)<br>{{msvc ver|2019.4}}(P1091R3)}}
| pgi={{yes|20.7}}
+
|pgi={{yes|20.7}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
<!-- 201907 -->
+
<!--201907-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Permit conversions to arrays of unknown bound
+
|feature=Permit conversions to arrays of unknown bound
| reference={{wg21|P0388R4}}
+
|reference={{wg21|P0388R4}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|14}}
+
|clang={{yes|14}}
| aclang={{yes|{{aclang ver|14.0.0}}}}
+
|aclang={{yes|{{aclang ver|14.0.0}}}}
| edg={{yes|6.0}}
+
|edg={{yes|6.0}}
| icc={{yes|2021.5}}
+
|icc={{yes|2021.5}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{tt|constexpr}} container operations
+
|feature={{tt|constexpr}} container operations
| reference={{wg21|P0784R7}}
+
|reference={{wg21|P0784R7}}
| version=c++20-lang
+
|version=c++20
| edg={{yes|6.0}}
+
|edg={{yes|6.0}}
| icc={{yes|2021.5}}
+
|icc={{yes|2021.5}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.9}}}}
+
|msvc={{yes|{{msvc ver|2019.9}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Deprecating some uses of [[cpp/language/cv#Notes|{{tt|volatile}}]]
+
|feature=Deprecating some uses of [[cpp/language/cv#Notes|{{tt|volatile}}]]
| reference={{wg21|P1152R4}}
+
|reference={{wg21|P1152R4}}
| version=c++20-lang
+
|version=c++20
| edg={{yes|6.0}}
+
|edg={{yes|6.0}}
| icc={{yes|2021.5}}
+
|icc={{yes|2021.5}}
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{ltt|cpp/language/constinit}}
+
|feature={{ltt|cpp/language/constinit}}
| reference={{wg21|P1143R2}}
+
|reference={{wg21|P1143R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=[[cpp/language/operator_other#Built-in comma operator|Deprecate comma operator in subscripts]]
+
|feature=[[cpp/language/operator_other#Built-in comma operator|Deprecate comma operator in subscripts]]
| reference={{wg21|P1161R3}}
+
|reference={{wg21|P1161R3}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| edg={{yes|6.0}}
+
|edg={{yes|6.0}}
| icc={{yes|2021.5}}
+
|icc={{yes|2021.5}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{attr|nodiscard}} with message
+
|feature={{attr|nodiscard}} with message
| reference={{wg21|P1301R4}}
+
|reference={{wg21|P1301R4}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| edg={{yes|6.0}}
+
|edg={{yes|6.0}}
| icc={{yes|2021.5}}
+
|icc={{yes|2021.5}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Trivial default initialization in {{tt|constexpr}} functions
+
|feature=Trivial default initialization in {{tt|constexpr}} functions
| reference={{wg21|P1331R2}}
+
|reference={{wg21|P1331R2}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Unevaluated {{tt|asm}}-declaration in {{tt|constexpr}} functions
+
|feature=Unevaluated {{tt|asm}}-declaration in {{tt|constexpr}} functions
| reference={{wg21|P1668R1}}
+
|reference={{wg21|P1668R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| msvc={{yes|{{msvc ver|2019.9}}}}
+
|msvc={{yes|{{msvc ver|2019.9}}}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature={{ltt|cpp/language/enum#Using-enum-declaration|using enum}}
+
|feature={{ltt|cpp/language/enum#Using-enum-declaration|using enum}}
| reference={{wg21|P1099R5}}
+
|reference={{wg21|P1099R5}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| msvc={{yes|{{msvc ver|2019.4}}}}
+
|msvc={{yes|{{msvc ver|2019.4}}}}
| edg={{yes|6.3}}
+
|edg={{yes|6.3}}
| clang={{yes|13}}
+
|icc={{yes|2023.1}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|clang={{yes|13}}
| nvcc={{yes|12.0}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Synthesizing {{ls|cpp/language/operator comparison|Three-way comparison}} for specified comparison category
+
|feature=Synthesizing {{ls|cpp/language/operator comparison#Three-way comparison}} for specified comparison category
| reference={{wg21|P1186R3}}
+
|reference={{wg21|P1186R3}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| edg={{yes|6.0}}
+
|edg={{yes|6.0}}
| icc={{yes|2021.5}}
+
|icc={{yes|2021.5}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| msvc={{yes|{{msvc ver|2019.4}}}}
+
|msvc={{yes|{{msvc ver|2019.4}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=DR: {{attr|nodiscard}} for constructors
+
|feature=DR17: {{attr|nodiscard}} for constructors
| reference={{wg21|P1771R1}}
+
|reference={{wg21|P1771R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| edg={{yes|6.0}}
+
|edg={{yes|6.0}}
| icc={{yes|2021.5}}
+
|icc={{yes|2021.5}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.4}}}}
+
|msvc={{yes|{{msvc ver|2019.4}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{lt|cpp/language/class template argument deduction}} for alias templates
+
|feature={{lt|cpp/language/class template argument deduction}} for alias templates
| reference={{wg21|P1814R0}}
+
|reference={{wg21|P1814R0}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|clang={{yes|19}}
| nvcc={{yes|12.0}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| edg={{yes|6.5}}
+
|nvcc={{yes|12.0}}
 +
|edg={{yes|6.5}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{lt|cpp/language/class template argument deduction}} for aggregates
+
|feature={{lt|cpp/language/class template argument deduction}} for aggregates
| reference={{wg21|P1816R0}}<br>{{wg21|P2082R1}}
+
|reference={{wg21|P1816R0}}<br>{{wg21|P2082R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10(P1816R0)<br>11(P2082R1)}}
+
|gcc={{yes|10(P1816R0)<br>11(P2082R1)}}
| edg={{yes|6.3}}
+
|clang={{yes|17}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|edg={{yes|6.3}}
| nvcc={{yes|12.0}}
+
|icc={{yes|{{popup|P2082R1 not implemented|2023.1 (partial)}}<br>2024.1}}
 +
|msvc={{yes|{{msvc ver|2019.7}}}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=DR: [[cpp/language/return|Implicit move]] for more local objects and rvalue references
+
|feature=DR11: [[cpp/language/return|Implicit move]] for more local objects and rvalue references
| reference={{wg21|P1825R0}}
+
|reference={{wg21|P1825R0}}
| version=c++20-lang
+
|version=c++20
| gcc ={{yes|{{popup|C++20 mode only|11}}}}
+
|gcc ={{yes|{{popup|C++20 mode only|11}}}}
| clang={{yes|13}}
+
|clang={{yes|13}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
| edg={{yes|6.0}}
+
|edg={{yes|6.0}}
| icc={{yes|2021.5}}
+
|icc={{yes|2021.5}}
| msvc={{yes|{{msvc ver|2019.4}}}}
+
|msvc={{yes|{{msvc ver|2019.4}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
<!-- 201911 -->
+
<!--201911-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Allow defaulting comparisons by value
+
|feature=Allow defaulting comparisons by value
| reference={{wg21|P1946R0}}
+
|reference={{wg21|P1946R0}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Remove {{tt|std::weak_equality}} and {{tt|std::strong_equality}}
+
|feature=Remove {{tt|std::weak_equality}} and {{tt|std::strong_equality}}
| reference={{wg21|P1959R0}}
+
|reference={{wg21|P1959R0}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| pgi={{yes|20.11}}
+
|pgi={{yes|20.11}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
| icc={{yes|2021.7}}
+
|icc={{yes|2021.7}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=Inconsistencies with non-type template parameters
+
|feature=Inconsistencies with non-type template parameters
| reference={{wg21|P1907R1}}
+
|reference={{wg21|P1907R1}}
| version=c++20-lang
+
|version=c++20
| gcc={{yes|10 (partial)<br>11}}
+
|gcc={{yes|10 (partial)<br>11}}
| clang={{maybe|12 (partial)}}
+
|clang={{maybe|{{popup|__cpp_nontype_template_args not updated|18 (partial)}}}}
| aclang={{maybe|{{aclang ver|13.1.6}} (partial)}}
+
|aclang={{maybe|{{aclang ver|13.1.6}} (partial)}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
| edg={{yes|6.2}}
+
|edg={{yes|6.2}}
| nvcc={{yes|12.0}}
+
|icc={{maybe|2023.1 (partial)}}
 +
|nvcc={{yes|12.0}}
 
}}
 
}}
<!-- 202002 -->
+
<!--202002-->
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=DR: Pseudo-destructors end object lifetimes
+
|feature=DR98: Pseudo-destructors end object lifetimes
| reference={{wg21|P0593R6}}
+
|reference={{wg21|P0593R6}}
| version=c++20-lang
+
|version=c++20
| clang={{yes|11}}
+
|clang={{yes|11}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.5}}}}
+
|aclang={{yes|{{aclang ver|12.0.5}}}}
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| edg={{n/a}}
+
|edg={{n/a}}
| icc={{n/a}}
+
|icc={{yes|{{popup|N/A up to 2021|2023.1}}}}
| msvc={{yes}}
+
|msvc={{yes}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
{{compiler_support_row  
 
{{compiler_support_row  
| feature=DR: Converting from {{tt|T*}} to {{c/core|bool}} should be considered narrowing
+
|feature=DR11: Converting from {{tt|T*}} to {{c/core|bool}} should be considered narrowing
| reference={{wg21|P1957R2}}
+
|reference={{wg21|P1957R2}}
| version=c++20-lang
+
|version=c++20
| clang={{yes|11}}
+
|clang={{yes|11}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| aclang={{yes|{{aclang ver|12.0.5}}}}
+
|aclang={{yes|{{aclang ver|12.0.5}}}}
| gcc={{yes|{{popup|C++20 mode only|10}}<br>{{popup|all modes|11}}}}
+
|gcc={{yes|{{popup|C++20 mode only|10}}<br>{{popup|all modes|11}}}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| nvcc={{yes|12.0}}
+
|nvcc={{yes|12.0}}
 
}}
 
}}
 
}}
 
}}
Line 925: Line 939:
 
===C++20 library features===
 
===C++20 library features===
 
{{standard library support|std=c++20|
 
{{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++20
+
|version=c++20
| clang={{yes|7}}
+
|clang={{yes|7}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| 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++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| gcc={{yes|12}}
+
|gcc={{yes|12}}
| clang={{yes|15}}
+
|clang={{yes|15}}
| aclang={{yes|{{aclang ver|14.0.3}}}}
+
|aclang={{yes|{{aclang ver|14.0.3}}}}
 
}}
 
}}
<!-- 201711 -->
+
<!--201711-->
 
{{standard library support row  
 
{{standard library support row  
| feature=[[cpp/atomic/atomic#Specializations for floating-point types|Floating-point atomic]]
+
|feature=[[cpp/atomic/atomic#Specializations for floating-point types|Floating-point atomic]]
| reference={{wg21|P0020R6}}
+
|reference={{wg21|P0020R6}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|clang={{yes|18}}
 +
|msvc={{yes|{{msvc ver|2019.2}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature=[[cpp/io/basic_syncbuf|Synchronized buffered]] ({{ltt|cpp/io/basic_osyncstream|std::basic_osyncstream}})
+
|feature=[[cpp/io/basic_syncbuf|Synchronized buffered]] ({{ltt|cpp/io/basic_osyncstream|std::basic_osyncstream}})
| reference={{wg21|P0053R7}}
+
|reference={{wg21|P0053R7}}
| version=c++20
+
|version=c++20
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|clang={{yes|18}}
 +
|msvc={{yes|{{msvc ver|2019.X}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| 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++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|8 (partial)<br>12}}
+
|clang={{yes|8 (partial)<br>12}}
| aclang={{yes|{{aclang ver|10.0.1}} (partial)<br>{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}} (partial)<br>{{aclang ver|13.0.0}}}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature=More {{tt|constexpr}} for {{header|complex}}
+
|feature=More {{tt|constexpr}} for {{header|complex}}
| reference={{wg21|P0415R1}}
+
|reference={{wg21|P0415R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|7 (partial)<br>16}}
+
|clang={{yes|7 (partial)<br>16}}
| aclang={{maybe|{{aclang ver|10.0.0}} (partial)}}
+
|aclang={{yes|{{aclang ver|10.0.0}} (partial)<br>{{aclang ver|15.0.0}}}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature=[[cpp/string/basic_string|String]] [[cpp/string/basic_string/starts_with|prefix]] and [[cpp/string/basic_string/ends_with|suffix]] checking: {{ltt|cpp/string/basic_string/starts_with|string}}{{ltt|cpp/string/basic_string_view/starts_with|(_view)}}{{ltt|cpp/string/basic_string/starts_with|::starts_with}}/{{ltt|cpp/string/basic_string_view/ends_with|ends_with}}
+
|feature=[[cpp/string/basic_string|String]] [[cpp/string/basic_string/starts_with|prefix]] and [[cpp/string/basic_string/ends_with|suffix]] checking: {{ltt|cpp/string/basic_string/starts_with|string}}{{ltt|cpp/string/basic_string_view/starts_with|(_view)}}{{ltt|cpp/string/basic_string/starts_with|::starts_with}}/{{ltt|cpp/string/basic_string_view/ends_with|ends_with}}
| reference={{wg21|P0457R2}}
+
|reference={{wg21|P0457R2}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|6}}
+
|clang={{yes|6}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature=Library support for [[cpp/language/operator comparison#Three-way comparison|{{tt|1=operator<=>}}]] {{header|compare}}
+
|feature=Library support for [[cpp/language/operator comparison#Three-way comparison|{{tt|1=operator<=>}}]] {{header|compare}}
| reference={{wg21|P0768R1}}
+
|reference={{wg21|P0768R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|7 (partial)<br>12}}
+
|clang={{yes|7 (partial)<br>{{popup|missing [alg.three.way]|12 (partial)}}<br>17}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
| msvc={{yes|{{msvc ver|2019}} (partial)<br>{{msvc ver|2019.9}}}}
+
|msvc={{yes|{{msvc ver|2019}} (partial)<br>{{msvc ver|2019.9}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| 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++20
+
|version=c++20
| clang={{yes|6}}
+
|clang={{yes|6}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2019}}}}
+
|msvc={{yes|{{msvc ver|2019}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{attr|nodiscard}} in the [[cpp/language/attributes/nodiscard#Standard library|standard library]]
+
|feature={{attr|nodiscard}} in the [[cpp/language/attributes/nodiscard#Standard library|standard library]]
| reference={{wg21|P0600R1}}
+
|reference={{wg21|P0600R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|7 (partial)<br>16}}
+
|clang={{yes|7 (partial)<br>16}}
| aclang={{maybe|{{aclang ver|10.0.0}} (partial)}}
+
|aclang={{yes|{{aclang ver|10.0.0}} (partial)<br>{{aclang ver|15.0.0}}}}
| msvc={{yes|{{msvc ver|2017.6}} (partial)<br>{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2017.6}} (partial)<br>{{msvc ver|2019.2}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Using {{tt|std::move}} in [[cpp/algorithm#Numeric_operations|numeric algorithms]]
+
|feature=Using {{tt|std::move}} in [[cpp/algorithm#Numeric_operations|numeric algorithms]]
| reference={{wg21|P0616R0}}
+
|reference={{wg21|P0616R0}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|12}}
+
|clang={{yes|12}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
| msvc={{yes|{{msvc ver|2019.3}}}}
+
|msvc={{yes|{{msvc ver|2019.3}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature=[[cpp/memory/to_address|Utility]] to convert a pointer to a raw pointer
+
|feature=[[cpp/memory/to_address|Utility]] to convert a pointer to a raw pointer
| reference={{wg21|P0653R2}}
+
|reference={{wg21|P0653R2}}
| version=c++20
+
|version=c++20
| clang={{yes|6}}
+
|clang={{yes|6}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| 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++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| gcc={{yes|12}}
+
|gcc={{yes|12}}
 
}}
 
}}
<!-- 201803 -->
+
<!--201803-->
 
{{standard library support row  
 
{{standard library support row  
| feature={{ltt|cpp/container/span|std::span}}
+
|feature={{ltt|cpp/container/span|std::span}}
| reference={{wg21|P0122R7}}
+
|reference={{wg21|P0122R7}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|7}}
+
|clang={{yes|7}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| 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++20
+
|version=c++20
| gcc={{maybe|{{popup|missing timezones and UTC time|11 (partial)}}<br>{{popup|missing parse and from_stream|13 (partial)}}}}
+
|gcc={{yes|{{popup|missing timezones and UTC time|11 (partial)}}<br>{{popup|missing parse and from_stream|13 (partial)}}<br>14}}
| clang={{maybe|7 (partial)}}
+
|clang={{maybe|7 (partial)<br>{{popup|locate_zone() and current_zone() implemented|19 ([https://libcxx.llvm.org/Status/Cxx20.html#note-p0355 partial])}}}}
| aclang={{maybe|{{aclang ver|10.0.0}} (partial)}}
+
|aclang={{maybe|{{aclang ver|10.0.0}} (partial)}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature={{header|version}}
+
|feature={{header|version}}
| reference={{wg21|P0754R2}}
+
|reference={{wg21|P0754R2}}
| version=c++20
+
|version=c++20
| clang={{yes|7}}
+
|clang={{yes|7}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Comparing unordered containers
+
|feature=Comparing unordered containers
| reference={{wg21|P0809R0}}
+
|reference={{wg21|P0809R0}}
| version=c++20
+
|version=c++20
| clang={{yes}}
+
|clang={{yes}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2010}}}}
+
|msvc={{yes|{{msvc ver|2010}}}}
| gcc={{yes}}
+
|gcc={{yes}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{named req|ConstexprIterator}} requirements
+
|feature={{named req|ConstexprIterator}} requirements
| reference={{wg21|P0858R0}}
+
|reference={{wg21|P0858R0}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| clang={{yes|12}}
+
|clang={{yes|12}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| gcc={{yes|11}}
+
|gcc={{yes|11}}
 
}}
 
}}
<!-- 201806 -->
+
<!--201806-->
 
{{standard library support row  
 
{{standard library support row  
| feature=[[cpp/atomic/atomic/compare_exchange|Atomic Compare-And-Exchange]] with padding bits
+
|feature=[[cpp/atomic/atomic/compare_exchange|Atomic Compare-And-Exchange]] with padding bits
| reference={{wg21|P0528R3}}
+
|reference={{wg21|P0528R3}}
| version=c++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.8}}}}
| gcc={{yes|13}}
+
|gcc={{yes|13}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature={{ltt|cpp/atomic/atomic_ref|std::atomic_ref}}
+
|feature={{ltt|cpp/atomic/atomic_ref|std::atomic_ref}}
| reference={{wg21|P0019R8}}
+
|reference={{wg21|P0019R8}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|clang={{yes|19}}
 +
|msvc={{yes|{{msvc ver|2019.8}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{tt|contains()}} member function of associative containers, e.g. {{ltf|cpp/container/map/contains|std::map::contains}}
+
|feature={{tt|contains()}} member function of associative containers, e.g. {{ltf|cpp/container/map/contains|std::map::contains}}
| reference={{wg21|P0458R2}}
+
|reference={{wg21|P0458R2}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|13}}
+
|clang={{yes|13}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=DR11: Guaranteed copy elision for [[cpp/memory/scoped_allocator_adaptor/construct|piecewise construction]]
+
|feature=DR11: Guaranteed copy elision for [[cpp/memory/scoped_allocator_adaptor/construct|piecewise construction]]
| reference={{wg21|P0475R1}}
+
|reference={{wg21|P0475R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes}}
+
|clang={{yes}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| 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++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| clang={{yes|14}}
+
|clang={{yes|14}}
| aclang={{yes|{{aclang ver|14.0.3}}}}
+
|aclang={{yes|{{aclang ver|14.0.3}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature=[[cpp/header/bit|Integral power-of-2 operations]]:
+
|feature=[[cpp/header/bit|Integral power-of-2 operations]]:
 
{{ltf|cpp/numeric/bit_ceil|std::bit_ceil}},
 
{{ltf|cpp/numeric/bit_ceil|std::bit_ceil}},
 
{{ltf|cpp/numeric/bit_floor|std::bit_floor}},
 
{{ltf|cpp/numeric/bit_floor|std::bit_floor}},
 
{{ltf|cpp/numeric/bit_width|std::bit_width}},
 
{{ltf|cpp/numeric/bit_width|std::bit_width}},
 
{{ltf|cpp/numeric/has_single_bit|std::has_single_bit}}
 
{{ltf|cpp/numeric/has_single_bit|std::has_single_bit}}
| reference={{wg21|P0556R3}} {{wg21|P1956R1}}
+
|reference={{wg21|P0556R3}} {{wg21|P1956R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|9<br>(P0556R3)<br>10 (P1956R1)}}
+
|gcc={{yes|9<br>(P0556R3)<br>10 (P1956R1)}}
| msvc={{yes|{{msvc ver|2019.5}} (P0556R3){{popup|with Clang}}<br>{{msvc ver|2019.7}} (P1956R1){{popup|with Clang}}<br>{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.5}} (P0556R3){{popup|with Clang}}<br>{{msvc ver|2019.7}} (P1956R1){{popup|with Clang}}<br>{{msvc ver|2019.8}}}}
| clang={{yes|9 (P0556R3)<br>12 (P1956R1)}}
+
|clang={{yes|9 (P0556R3)<br>12 (P1956R1)}}
| aclang={{yes|{{aclang ver|11.0.3}} (P0556R3)<br>{{aclang ver|13.0.0}} (P1956R1)}}
+
|aclang={{yes|{{aclang ver|11.0.3}} (P0556R3)<br>{{aclang ver|13.0.0}} (P1956R1)}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| 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++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| clang={{yes|9}}
+
|clang={{yes|9}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2019.3}}}}
+
|msvc={{yes|{{msvc ver|2019.3}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Add {{ltt|cpp/algorithm/shift|std::shift_left/right}} to {{header|algorithm}}
+
|feature=Add {{ltt|cpp/algorithm/shift|std::shift_left/right}} to {{header|algorithm}}
| reference={{wg21|P0769R2}}
+
|reference={{wg21|P0769R2}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|12}}
+
|clang={{yes|12}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
 
}}
 
}}
 
{{standard library support row|
 
{{standard library support row|
| 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++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|13}}
+
|clang={{yes|13}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature=[[cpp/concepts|Concepts library]]
+
|feature=[[cpp/concepts|Concepts library]]
| reference={{wg21|P0898R3}}
+
|reference={{wg21|P0898R3}}
| version=c++20
+
|version=c++20
| clang={{yes|13}}
+
|clang={{yes|13}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.3}}}}
+
|msvc={{yes|{{msvc ver|2019.3}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{tt|constexpr}} [[cpp/container/array/operator cmp|comparison operators]] for {{lc|std::array}}
+
|feature={{tt|constexpr}} [[cpp/container/array/operator cmp|comparison operators]] for {{lc|std::array}}
| reference={{wg21|P1023R0}}
+
|reference={{wg21|P1023R0}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
 
}}
 
}}
<!-- 201811 -->
+
<!--201811-->
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| msvc={{yes|{{msvc ver|2019.1}}}}
+
|msvc={{yes|{{msvc ver|2019.1}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|13}}
+
|clang={{yes|13}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::reference_wrapper}} for incomplete types
+
|feature={{lc|std::reference_wrapper}} for incomplete types
| reference={{wg21|P0357R3}}
+
|reference={{wg21|P0357R3}}
| version=c++20
+
|version=c++20
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| msvc={{yes|{{msvc ver|2019.3}}}}
+
|msvc={{yes|{{msvc ver|2019.3}}}}
| gcc={{yes|11}}
+
|gcc={{yes|11}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Library support for [[cpp/language/types#char8_t|{{tt|char8_t}}]]
+
|feature=Library support for [[cpp/language/types#char8_t|{{tt|char8_t}}]]
| reference={{wg21|P0482R6}}
+
|reference={{wg21|P0482R6}}
| version=c++20
+
|version=c++20
| clang={{yes|8 (partial)<br>16}}
+
|clang={{yes|8 (partial)<br>16}}
| aclang={{maybe|{{aclang ver|10.0.1}} (partial)}}
+
|aclang={{yes|{{aclang ver|10.0.1}} (partial)<br>{{aclang ver|15.0.0}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|16}}
+
|clang={{yes|16}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 +
|aclang={{yes|{{aclang ver|15.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=DR17: {{lc|std::variant}} and {{lc|std::optional}} should propagate copy/move triviality
+
|feature=DR17: {{lc|std::variant}} and {{lc|std::optional}} should propagate copy/move triviality
| reference={{wg21|P0602R4}}
+
|reference={{wg21|P0602R4}}
| version=c++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| gcc={{yes|8.3}}
+
|gcc={{yes|8.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=A sane {{lc|std::variant}} converting constructor
+
|feature=DR17: A sane {{lc|std::variant}} converting constructor
| reference={{wg21|P0608R3}}
+
|reference={{wg21|P0608R3}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{popup|not implemented in C++17 mode|{{msvc ver|2019.X}}}}<br>{{popup|implemented in C++17 mode|{{msvc ver|2022.12}}}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::function}}'s move constructor should be {{ltt|cpp/language/noexcept}}
+
|feature={{lc|std::function}}'s move constructor should be {{ltt|cpp/language/noexcept}}
| reference={{wg21|P0771R1}}
+
|reference={{wg21|P0771R1}}
| version=c++20
+
|version=c++20
| clang={{yes|6}}
+
|clang={{yes|6}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2019.2}}}}
+
|msvc={{yes|{{msvc ver|2019.2}}}}
| gcc={{yes|7.2}}
+
|gcc={{yes|7.2}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|13 (partial)<br>{{popup|Prior to libc++ 16, this feature is considered experimental and the -fexperimental-library compiler flag is required|15}}}}
+
|clang={{yes|13 (partial)<br>{{popup|Prior to libc++ 16, this feature is considered experimental and the -fexperimental-library compiler flag is required|15}}}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
| aclang={{yes|{{aclang ver|14.0.3}}}}
+
|aclang={{yes|{{aclang ver|14.0.3}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Heterogeneous lookup for [[cpp/container#Unordered associative containers|unordered containers]]
+
|feature=Heterogeneous lookup for [[cpp/container#Unordered associative containers|unordered containers]]
| reference={{wg21|P0919R3}} {{wg21|P1690R1}}
+
|reference={{wg21|P0919R3}} {{wg21|P1690R1}}
| version=c++20
+
|version=c++20
| clang={{yes|12}}
+
|clang={{yes|12}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
| msvc={{yes|{{msvc ver|2019.3}} (P0919R3)<br>{{msvc ver|2019.5}} (P1690R1)}}
+
|msvc={{yes|{{msvc ver|2019.3}} (P0919R3)<br>{{msvc ver|2019.5}} (P1690R1)}}
| gcc={{yes|11}}
+
|gcc={{yes|11}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{header|chrono}} {{tt|zero()}}, {{tt|min()}}, and {{tt|max()}} should be {{ltt|cpp/language/noexcept}}
+
|feature={{header|chrono}} {{tt|zero()}}, {{tt|min()}}, and {{tt|max()}} should be {{ltt|cpp/language/noexcept}}
| reference={{wg21|P0972R0}}
+
|reference={{wg21|P0972R0}}
| version=c++20
+
|version=c++20
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{tt|constexpr}} in {{lc|std::pointer_traits}}
+
|feature={{tt|constexpr}} in {{lc|std::pointer_traits}}
| reference={{wg21|P1006R1}}
+
|reference={{wg21|P1006R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|{{popup|not constexpr until 9.4 and 10.3|9}}<br>11}}
+
|gcc={{yes|{{popup|not constexpr until 9.4 and 10.3|9}}<br>11}}
| msvc={{yes|{{msvc ver|2019.9}}}}
+
|msvc={{yes|{{msvc ver|2019.9}}}}
| clang={{yes|15}}
+
|clang={{yes|15}}
| aclang={{yes|{{aclang ver|14.0.3}}}}
+
|aclang={{yes|{{aclang ver|14.0.3}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Smart pointer creation with default initialization (e.g. {{ltt|cpp/memory/unique_ptr/make_unique|make_unique_for_overwrite}})
+
|feature=Smart pointer creation with default initialization (e.g. {{ltt|cpp/memory/unique_ptr/make_unique|make_unique_for_overwrite}})
| reference={{wg21|P1020R1}}<br>{{wg21|P1973R1}}
+
|reference={{wg21|P1020R1}}<br>{{wg21|P1973R1}}
| version=c++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.9}}}}
+
|msvc={{yes|{{msvc ver|2019.9}}}}
| gcc={{yes|11 (unique_ptr)<br>12 (shared_ptr)}}
+
|gcc={{yes|11 (unique_ptr)<br>12 (shared_ptr)}}
| clang={{yes|16}}
+
|clang={{yes|16}}
 +
|aclang={{yes|{{aclang ver|15.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Misc {{tt|constexpr}} bits
+
|feature=Misc {{tt|constexpr}} bits
| reference={{wg21|P1032R1}}
+
|reference={{wg21|P1032R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.8}}}}
| clang={{yes|13}}
+
|clang={{yes|13}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Remove comparison operators of {{ltt|cpp/container/span|std::span}}
+
|feature=Remove comparison operators of {{ltt|cpp/container/span|std::span}}
| reference={{wg21|P1085R2}}
+
|reference={{wg21|P1085R2}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.1}}}}
+
|aclang={{yes|{{aclang ver|10.0.1}}}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| 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++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
| clang={{yes|15}}
+
|clang={{yes|15}}
| aclang={{yes|{{aclang ver|14.0.3}}}}
+
|aclang={{yes|{{aclang ver|14.0.3}}}}
 
}}
 
}}
 
{{standard library support row  
 
{{standard library support row  
| feature=Consistent container erasure, e.g. {{ltt|cpp/container/vector/erase2|std::erase(std::vector)}}, or {{ltt|cpp/container/map/erase_if|std::erase_if(std::map)}}
+
|feature=Consistent container erasure, e.g. {{ltt|cpp/container/vector/erase2|std::erase(std::vector)}}, or {{ltt|cpp/container/map/erase_if|std::erase_if(std::map)}}
| reference={{wg21|P1209R0}} {{wg21|P1115R3}}
+
|reference={{wg21|P1209R0}} {{wg21|P1115R3}}
| version=c++20
+
|version=c++20
| gcc={{yes|9<br>(P1209R0)<br>10 (P1115R3)}}
+
|gcc={{yes|9<br>(P1209R0)<br>10 (P1115R3)}}
| clang={{yes|8 (P1209R0) <br>11 (P1115R3)}}
+
|clang={{yes|8 (P1209R0) <br>11 (P1115R3)}}
| aclang={{yes|{{aclang ver|10.0.1}} (P1209R0)<br>{{aclang ver|12.0.5}} (P1115R3)}}
+
|aclang={{yes|{{aclang ver|10.0.1}} (P1209R0)<br>{{aclang ver|12.0.5}} (P1115R3)}}
| msvc={{yes|{{msvc ver|2019.5}} (P1209R0)<br>{{msvc ver|2019.7}} (P1115R3)}}
+
|msvc={{yes|{{msvc ver|2019.5}} (P1209R0)<br>{{msvc ver|2019.7}} (P1115R3)}}
 
}}
 
}}
 
<!--201902-->
 
<!--201902-->
 
{{standard library support row
 
{{standard library support row
| feature=Standard library header units
+
|feature=Standard library header units
| reference={{wg21|P1502R1}}
+
|reference={{wg21|P1502R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{ltt|cpp/memory/polymorphic_allocator|polymorphic_allocator<>}} as a vocabulary type
+
|feature={{ltt|cpp/memory/polymorphic_allocator|polymorphic_allocator<>}} as a vocabulary type
| reference={{wg21|P0339R6}}
+
|reference={{wg21|P0339R6}}
| version=c++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.9}}}}
+
|msvc={{yes|{{msvc ver|2019.9}}}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|16}}
+
|clang={{yes|16}}
 +
|aclang={{yes|{{aclang ver|15.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{ltt|cpp/algorithm/execution_policy_tag|std::execution::unseq}}
+
|feature={{ltt|cpp/algorithm/execution_policy_tag|std::execution::unseq}}
| reference={{wg21|P1001R2}}
+
|reference={{wg21|P1001R2}}
| version=c++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.8}}}}
| gcc={{yes|9}}
+
|clang={{yes|17}}
 +
|gcc={{yes|9}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.3}} (partial)<br>{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.3}} (partial)<br>{{msvc ver|2019.8}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Usability enhancements for {{ltt|cpp/container/span|std::span}}
+
|feature=Usability enhancements for {{ltt|cpp/container/span|std::span}}
| reference={{wg21|P1024R3}}
+
|reference={{wg21|P1024R3}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|{{popup|nodiscard missing|9}}<br>14}}
+
|clang={{yes|{{popup|nodiscard missing|9}}<br>14}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=DR17: Make {{ltf|cpp/filesystem/create_directory}} intuitive
+
|feature=DR17: Make {{ltf|cpp/filesystem/create_directory}} intuitive
| reference={{wg21|P1164R1}}
+
|reference={{wg21|P1164R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|8.3}}
+
|gcc={{yes|8.3}}
| clang={{yes|12}}
+
|clang={{yes|12}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
| msvc={{yes|{{msvc ver|2019}}}}
+
|msvc={{yes|{{msvc ver|2019}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{ltf|cpp/iterator/size|std::ssize}} and unsigned extent for {{ltt|cpp/container/span|std::span}}
+
|feature={{ltf|cpp/iterator/size|std::ssize}} and unsigned extent for {{ltt|cpp/container/span|std::span}}
| reference={{wg21|P1227R2}}
+
|reference={{wg21|P1227R2}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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|P1357R1}}
+
|reference={{wg21|P1357R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
 
}}
 
}}
 
<!--201907-->
 
<!--201907-->
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| clang={{yes|10}}
+
|clang={{yes|10}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| clang={{maybe|{{popup|Only `view()` members implemented|17 (partial)}}}}
+
|clang={{yes|17}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 +
|aclang={{yes|{{aclang ver|15.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|12}}
+
|gcc={{yes|12}}
| msvc={{yes|{{msvc ver|2019.X}}}}<span title="Initially supported for MSVC only; will be supported for Clang after LLVM-48860 is resolved.">*</span>
+
|msvc={{yes|{{msvc ver|2019.X}}}}<span title="Initially supported for MSVC only; will be supported for Clang after LLVM-48860 is resolved.">*</span>
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/numeric#Bit manipulation (since C++20)|Bit operations]]: {{tt|std::}}
+
|feature=[[cpp/numeric#Bit manipulation (since C++20)|Bit operations]]: {{tt|std::}}
 
{{ltf|cpp/numeric/rotl}},
 
{{ltf|cpp/numeric/rotl}},
 
{{ltf|cpp/numeric/rotr}},
 
{{ltf|cpp/numeric/rotr}},
Line 1,501: Line 1,523:
 
{{ltf|cpp/numeric/countr_one}},
 
{{ltf|cpp/numeric/countr_one}},
 
{{ltf|cpp/numeric/popcount}}
 
{{ltf|cpp/numeric/popcount}}
| reference={{wg21|P0553R4}}
+
|reference={{wg21|P0553R4}}
| version=c++20
+
|version=c++20
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|9}}
+
|clang={{yes|9}}
| aclang={{yes|{{aclang ver|11.0.3}}}}
+
|aclang={{yes|{{aclang ver|11.0.3}}}}
| msvc={{yes|{{msvc ver|2019.5}}{{popup|with Clang}}<br>{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}{{popup|with Clang}}<br>{{msvc ver|2019.8}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/numeric/constants|Mathematical constants]]
+
|feature=[[cpp/numeric/constants|Mathematical constants]]
| reference={{wg21|P0631R8}}
+
|reference={{wg21|P0631R8}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.5}}}}
+
|msvc={{yes|{{msvc ver|2019.5}}}}
| clang={{yes|11}}
+
|clang={{yes|11}}
| aclang={{yes|{{aclang ver|12.0.5}}}}
+
|aclang={{yes|{{aclang ver|12.0.5}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/utility/format|Text formatting]]
+
|feature=[[cpp/utility/format|Text formatting]]
| reference={{wg21|P0645R10}}
+
|reference={{wg21|P0645R10}}
| version=c++20
+
|version=c++20
| gcc={{yes|13}}
+
|gcc={{yes|13}}
| clang={{yes|{{popup|Support is considered experimental and the -fexperimental-library compiler flag is required|14}}}}
+
|clang={{yes|{{popup|Support is considered experimental and the -fexperimental-library compiler flag is required|14}}<br>17}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 +
|aclang={{yes|{{aclang ver|15.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| msvc={{yes|{{msvc ver|2019.9}}}}
+
|clang={{yes|{{popup|Missing std::jthread and std::conditional_variable_any::wait_(until/for)|17<br>(partial)}}<br>{{popup|The feature was implemented since LLVM 18 but was guarded behind `-fexperimental-library`|20}}}}
 +
|msvc={{yes|{{msvc ver|2019.9}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{tt|constexpr}} {{lc|std::allocator}} and related utilities
+
|feature={{tt|constexpr}} {{lc|std::allocator}} and related utilities
| reference={{wg21|P0784R7}}
+
|reference={{wg21|P0784R7}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|12}}
+
|clang={{yes|12}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{tt|constexpr}} {{lc|std::string}}
+
|feature={{tt|constexpr}} {{lc|std::string}}
| reference={{wg21|P0980R1}}
+
|reference={{wg21|P0980R1}}
| version=c++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.X}}<br>{{popup|Enabled for Clang 12+|{{msvc ver|19.30}}}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}<br>{{popup|Enabled for Clang 12+|{{msvc ver|19.30}}}}}}
| gcc={{yes|12}}
+
|gcc={{yes|12}}
| clang={{yes|15}}
+
|clang={{yes|15}}
| aclang={{yes|{{aclang ver|14.0.3}}}}
+
|aclang={{yes|{{aclang ver|14.0.3}}}}
 
}}
 
}}
 
 
{{standard library support row
 
{{standard library support row
| feature={{tt|constexpr}} {{lc|std::vector}}
+
|feature={{tt|constexpr}} {{lc|std::vector}}
| reference={{wg21|P1004R2}}
+
|reference={{wg21|P1004R2}}
| version=c++20
+
|version=c++20
| msvc={{yes|{{msvc ver|2019.X}}<br>{{popup|Enabled for Clang 12+|{{msvc ver|19.30}}}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}<br>{{popup|Enabled for Clang 12+|{{msvc ver|19.30}}}}}}
| gcc={{yes|12}}
+
|gcc={{yes|12}}
| clang={{yes|15}}
+
|clang={{yes|15}}
| aclang={{yes|{{aclang ver|14.0.3}}}}
+
|aclang={{yes|{{aclang ver|14.0.3}}}}
 
}}
 
}}
 
 
{{standard library support row
 
{{standard library support row
| feature=Input [[cpp/ranges|range adaptors]]
+
|feature=Input [[cpp/ranges|range adaptors]]
| reference={{wg21|P1035R7}}
+
|reference={{wg21|P1035R7}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|16}}
+
|clang={{yes|16}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 +
|aclang={{yes|{{aclang ver|15.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{tt|constexpr}} {{lc|std::invoke()}} and related utilities
+
|feature={{tt|constexpr}} {{lc|std::invoke()}} and related utilities
| reference={{wg21|P1065R2}}
+
|reference={{wg21|P1065R2}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|12}}
+
|clang={{yes|12}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.8}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| clang={{yes|11}}
+
|clang={{yes|11}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
| msvc={{yes|{{msvc ver|2019.8}}}}
+
|msvc={{yes|{{msvc ver|2019.8}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| 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++20
+
|version=c++20
| gcc={{yes|11}}
+
|gcc={{yes|11}}
| clang={{yes|{{popup|__builtin_source_location implemented, missing libstdc++ implementation (https://reviews.llvm.org/D120159, https://reviews.llvm.org/D120634). Also wrong location reported when used as default argument (https://github.com/llvm/llvm-project/issues/56379)|15}}<br>(partial)<br>16}}
+
|clang={{yes|{{popup|__builtin_source_location implemented, missing libstdc++ implementation (https://reviews.llvm.org/D120159, https://reviews.llvm.org/D120634). Also wrong location reported when used as default argument (https://github.com/llvm/llvm-project/issues/56379)|15}}<br>(partial)<br>16}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 +
|aclang={{yes|{{aclang ver|15.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Adding {{ltt|cpp/language/operator_comparison#Three-way_comparison|2=<=>}} to the standard library
+
|feature=Adding {{ltt|cpp/language/operator_comparison#Three-way_comparison|2=<=>}} to the standard library
| reference={{wg21|P1614R2}}
+
|reference={{wg21|P1614R2}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{maybe|{{popup|Essential parts implemented, various operator implementations missing.|14}}<br>(partial)}}
+
|clang={{yes|{{popup|Essential parts implemented, various operator implementations missing.|14}}<br>(partial)<br>{{popup|All parts are implemented but time_zone, which itself is not yet implemented in the library.|17}}<br>(partial)<br>19}}
| aclang={{maybe|{{aclang ver|13.1.6}} (partial)}}
+
|aclang={{maybe|{{aclang ver|13.1.6}} (partial)}}
| msvc={{yes|{{msvc ver|2019.X}}}}
+
|msvc={{yes|{{msvc ver|2019.X}}}}
 
}}
 
}}
<!-- 201911 -->
+
<!--201911-->
 
{{standard library support row
 
{{standard library support row
| feature={{tt|constexpr}} default constructor of {{lc|std::atomic}} and {{lc|std::atomic_flag}}
+
|feature={{tt|constexpr}} default constructor of {{lc|std::atomic}} and {{lc|std::atomic_flag}}
| reference={{wg21|P0883R2}}
+
|reference={{wg21|P0883R2}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|13}}
+
|clang={{yes|13}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{tt|constexpr}} for [[cpp/numeric#Numeric operations|numeric algorithms]]
+
|feature={{tt|constexpr}} for [[cpp/numeric#Numeric operations|numeric algorithms]]
| reference={{wg21|P1645R1}}
+
|reference={{wg21|P1645R1}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|12}}
+
|clang={{yes|12}}
| aclang={{yes|{{aclang ver|13.0.0}}}}
+
|aclang={{yes|{{aclang ver|13.0.0}}}}
| msvc={{yes|{{msvc ver|2019.6}}}}
+
|msvc={{yes|{{msvc ver|2019.6}}}}
 
}}
 
}}
<!-- 202002 -->
+
<!--202002-->
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/utility#Integer_comparison_functions|Safe integral comparisons]]
+
|feature=[[cpp/utility#Integer_comparison_functions|Safe integral comparisons]]
| reference={{wg21|P0586R2}}
+
|reference={{wg21|P0586R2}}
| version=c++20
+
|version=c++20
| gcc={{yes|10}}
+
|gcc={{yes|10}}
| clang={{yes|13}}
+
|clang={{yes|13}}
| aclang={{yes|{{aclang ver|13.1.6}}}}
+
|aclang={{yes|{{aclang ver|13.1.6}}}}
| msvc={{yes|{{msvc ver|2019.7}}}}
+
|msvc={{yes|{{msvc ver|2019.7}}}}
 
}}
 
}}
 
}}
 
}}

Latest revision as of 21:22, 15 September 2024

[edit] 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*

10.0.0*

5.1 2021.1 11.0 20.7 12.0
__VA_OPT__ P0306R4
P1042R1
8 (partial)*
10 (partial)*
12
9 19.25*

11.0.3*

5.1 2021.1 11.0 20.7 12.0
Designated initializers P0329R4 4.7 (partial)*
8
3.0 (partial)*
10
19.21*

12.0.0*

5.1 2021.1 11.0 20.7 12.0
template-parameter-list for generic lambdas P0428R2 8 9 19.22*

11.0.0*

5.1 2021.1 11.0 20.7 12.0
Default member initializers for bit-fields P0683R1 8 6 19.25*

10.0.0*

5.1 2021.1 11.0 20.7 12.0
Initializer list constructors in class template argument deduction P0702R1 8 6 19.14* Yes 5.0 2021.1 11.0 20.7 12.0
const&-qualified pointers to members P0704R1 8 6 19.0 (2015)*

10.0.0*

5.1 2021.1 11.0 20.7 12.0
Concepts P0734R0 6
(TS only)
10
10 19.23* (partial)*
19.30*

12.0.0* (partial)

6.1 2023.1* 11.0 20.11 12.0
Lambdas in unevaluated contexts P0315R4 9 13 (partial)*
14 (partial)*
17
19.28 (16.8)*

13.1.6* (partial)

6.2 2023.1 (partial)
2024.0
12.0
Three-way comparison operator P0515R3 10 8 (partial)
10
19.20*

12.0.0*

5.1 2021.1 11.0 20.7 12.0
DR11: Simplifying implicit lambda capture P0588R1 8 19.24* 5.1 2021.1 20.7 12.0
init-statements for range-based for P0614R1 9 8 19.25*

11.0.0*

6.0 2021.7 11.0 20.11 12.0
Default constructible and assignable stateless lambdas P0624R2 9 8 19.22*

10.0.1*

5.1 2021.1 11.0 20.7 12.0
Type mismatch of defaulted special member functions P0641R2 9 (partial)* 8 19.0 (2015)* (partial)*

10.0.1*

5.1 2021.1 11.0 20.7 12.0
Access checking on specializations P0692R1 Yes 8 (partial)
14
19.26*

14.0.0*

5.1 2021.1 20.7 12.0
ADL and function templates that are not visible P0846R0 9 9 19.21*

11.0.3*

5.1 2021.1 11.0 20.7 12.0
DR11: Specify when constexpr function definitions are needed for constant evaluation P0859R0 5.2 (partial)*
9
8 19.27* (partial)*
19.31**

11.0.0*

11.0 12.0
Attributes [[likely]] and [[unlikely]] P0479R5 9 12 19.26*

13.0.0*

5.1 2021.7 20.7 12.0
Make typename more optional P0634R3 9 16 19.29 (16.10)* 5.1 2023.1 20.7 12.0
Pack-expansions in lambda init-captures P0780R2 9 9 19.22*

11.0.3*

6.1 2021.7 11.0 20.11 12.0
Attribute [[no_unique_address]] P0840R2 9 9 19.28 (16.9)**

11.0.3*

5.1 2021.1 11.0 20.7 12.0
Conditionally Trivial Special Member Functions P0848R3 10 16 19.28 (16.8)* 6.1 2021.7 20.11 12.0
DR17: Relaxing the structured bindings customization point finding rules P0961R1 8 8 19.21*

10.0.1*

5.1 2021.1 11.0 20.7 12.0
DR11: Relaxing the range-for loop customization point finding rules P0962R1 8 8 19.25*

11.0.0*

5.1 2021.1 11.0 20.7 12.0
DR17: Allow structured bindings to accessible members P0969R0 8 8 19.21*

10.0.1*

5.1 2021.1 11.0 20.7 12.0
Destroying operator delete P0722R3 9 6 19.27*

10.0.0*

6.1 2023.1 11.0 20.11 12.0
Class types in Non-type template parameters P0732R2 9 12 (partial) 19.26*(partial)*
19.28 (16.9)*

13.0.0* (partial)

6.2 2023.1 (partial) 12.0
Deprecate implicit capture of this via [=] P0806R2 9 7 19.22*

10.0.1*

5.1 11.0 20.7 12.0
explicit(bool) P0892R2 9 9 19.24*

11.0.3*

5.1 2021.1 11.0 20.7 12.0
Integrating feature-test macros P0941R2 5 3.4 19.15* (partial)
19.20*
Yes 5.0 2021.1 11.0 20.7 12.0
Prohibit aggregates with user-declared constructors P1008R1 9 8 19.20*

10.0.1*

5.1 2021.1 11.0 20.7 12.0
constexpr virtual function P1064R0 9 9 19.28 (16.9)*

11.0.3*

5.1 2021.1 11.0 20.7 12.0
Consistency improvements for comparisons P1120R0 10 8 (partial)
10
19.22*

12.0.0*

5.1 2023.1 11.0 20.7 12.0
char8_t P0482R6 9 7* 19.22*

10.0.0*

5.1 2021.1 11.0 20.7 12.0
std::is_constant_evaluated() P0595R2 9 9 19.25*

11.0.3*

5.1 19.1 11.0 12.0
constexpr try-catch blocks P1002R1 9 8 19.25*

10.0.1*

5.1 2023.1 11.0 20.7 12.0
Immediate functions (consteval) P1073R3 10 (partial)*
11
11 (partial)
14 (partial)*
17
19.28 (16.8)*
(partial)*

19.29 (16.10)*

11.0.3* (partial)
15.0.0*

5.1 2021.1 20.7 12.0
Nested inline namespaces P1094R2 9 8 19.27*

10.0.1*

5.1 2021.1 11.0 20.7 12.0
Yet another approach for constrained declarations P1141R2 10 10 19.26* (partial)
19.28 (16.9)*

12.0.5*

6.1 2023.1 11.0 20.11 12.0
Signed integers are two's complement P1236R1 9 9 Yes

11.0.3*

N/A 2023.1* 11.0 yes* 12.0
dynamic_cast and polymorphic typeid in constant expressions P1327R1 10 9 19.29 (16.10)*

11.0.3*

5.1 2021.1 11.0 20.7 12.0
Changing the active member of a union inside constexpr P1330R0 9 9 19.10*

11.0.3*

5.1 2021.1 11.0 20.7 12.0
Coroutines P0912R5 10 8 (partial)
17 (partial)*
19.0 (2015)* (partial)
19.10* (TS only)
19.28 (16.8)*

10.0.1* (partial)

5.1 2021.1 12.0 (host code only)
Parenthesized initialization of aggregates P0960R3 10 16 19.28 (16.8)* 5.1 2021.1 20.7 12.0
DR11: Array size deduction in new-expressions P1009R2 11 9 19.27*

11.0.3*

5.1 2021.1 11.0 20.7 12.0
Modules P1103R3 11 (partial) 8 (partial) 19.0 (2015)* (partial)
19.10* (TS only)
19.28 (16.8)*

10.0.1* (partial)

2023.1 (partial)
Stronger Unicode requirements P1041R4
P1139R2
10 Yes 19.0 (2015)* (P1041R4)
19.26* (P1139R2)
Yes N/A 2023.1* 11.0 12.0
<=> != == P1185R2 10 10 19.22*

12.0.0*

5.1 2021.1 11.0 20.7 12.0
DR11: Explicitly defaulted functions with different exception specifications P1286R2 10 9 19.28 (16.8)*

11.0.3*

5.1 2021.1 11.0 20.7 12.0
Lambda capture and storage class specifiers of structured bindings P1091R3
P1381R1
10 8 (partial)
16
19.11*(P1381R1)
19.24*(P1091R3)

10.0.1* (partial)

5.1 2021.1 20.7 12.0
Permit conversions to arrays of unknown bound P0388R4 10 14 19.27*

14.0.0*

6.0 2021.5 20.11 12.0
constexpr container operations P0784R7 10 10 19.28 (16.9)*

12.0.0*

6.0 2021.5 11.0 20.11 12.0
Deprecating some uses of volatile P1152R4 10 10 19.27*

12.0.0*

6.0 2021.5 11.0 20.11 12.0
constinit P1143R2 10 10 19.29 (16.10)*

12.0.0*

6.1 2021.7 11.0 20.11 12.0
Deprecate comma operator in subscripts P1161R3 10 9 19.25*

11.0.3*

6.0 2021.7 11.0 20.11 12.0
[[nodiscard]] with message P1301R4 10 9 19.25*

11.0.3*

6.0 2021.5 11.0 20.11 12.0
Trivial default initialization in constexpr functions P1331R2 10 10 19.27*

12.0.0*

6.1 2021.7 11.0 20.11 12.0
Unevaluated asm-declaration in constexpr functions P1668R1 10 10 19.28 (16.9)*

12.0.0*

6.1 2021.7 11.0 20.11 12.0
using enum P1099R5 11 13 19.24*

13.1.6*

6.3 2023.1 12.0
Synthesizing Three-way comparison for specified comparison category P1186R3 11 10 19.24*

12.0.0*

6.0 2021.5 11.0 20.11 12.0
DR17: [[nodiscard]] for constructors P1771R1 10 9 19.24*

11.0.3*

6.0 2021.5 11.0 20.11 12.0
class template argument deduction for alias templates P1814R0 10 19 19.27* 6.5 12.0
class template argument deduction for aggregates P1816R0
P2082R1
10(P1816R0)
11(P2082R1)
17 19.27* 6.3 2023.1 (partial)*
2024.1
12.0
DR11: Implicit move for more local objects and rvalue references P1825R0 11* 13 19.24*

13.1.6*

6.0 2021.5 20.11 12.0
Allow defaulting comparisons by value P1946R0 10 10 19.25*

12.0.0*

6.1 2021.7 11.0 20.11 12.0
Remove std::weak_equality and std::strong_equality P1959R0 10 10 19.25*

12.0.0*

6.1 2021.7 11.0 20.11 12.0
Inconsistencies with non-type template parameters P1907R1 10 (partial)
11
18 (partial)* 19.26*

13.1.6* (partial)

6.2 2023.1 (partial) 12.0
DR98: Pseudo-destructors end object lifetimes P0593R6 11 11 Yes

12.0.5*

N/A 2023.1* 11.0 12.0
DR11: Converting from T* to bool should be considered narrowing P1957R2 10*
11*
11 19.27*

12.0.5*

6.1 11.0 12.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

[edit] 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*

10.0.0*

Extending std::make_shared() to support arrays P0674R1 12 15 19.27*

14.0.3*

Floating-point atomic P0020R6 10 18 19.22*
Synchronized buffered (std::basic_osyncstream) P0053R7 11 18 19.29 (16.10)*
constexpr for <algorithm> and <utility> P0202R3 10 8 (partial)
12
19.26*

10.0.1* (partial)
13.0.0*

More constexpr for <complex> P0415R1 9 7 (partial)
16
19.27*

10.0.0* (partial)
15.0.0*

Make std::memory_order a scoped enumeration P0439R0 9 9 19.25*

11.0.3*

String prefix and suffix checking: string(_view) ::starts_with/ends_with P0457R2 9 6 19.21*

10.0.0*

Library support for operator<=> <compare> P0768R1 10 7 (partial)
12 (partial)*
17
19.20* (partial)
19.28 (16.9)*

13.0.0*

std::remove_cvref P0550R2 9 6 19.20*

10.0.0*

[[nodiscard]] in the standard library P0600R1 9 7 (partial)
16
19.13* (partial)
19.22*

10.0.0* (partial)
15.0.0*

Using std::move in numeric algorithms P0616R0 9 12 19.23*

13.0.0*

Utility to convert a pointer to a raw pointer P0653R2 8 6 19.22* Yes
Atomic std::shared_ptr and std::weak_ptr P0718R2 12 19.27*
std::span P0122R7 10 7 19.26*

10.0.0*

Calendar and timezone P0355R7 11 (partial)*
13 (partial)*
14
7 (partial)
19 (partial)*
19.29 (16.10)*

10.0.0* (partial)

<version> P0754R2 9 7 19.22*

10.0.0*

Comparing unordered containers P0809R0 Yes Yes 16.0* Yes
ConstexprIterator requirements P0858R0 9 12 19.11*

13.0.0*

std::basic_string::reserve() should not shrink P0966R1 11 8 19.25*

10.0.1*

Atomic Compare-And-Exchange with padding bits P0528R3 13 19.28 (16.8)*
std::atomic_ref P0019R8 10 19 19.28 (16.8)*
contains() member function of associative containers, e.g. std::map::contains() P0458R2 9 13 19.21*

13.1.6*

DR11: Guaranteed copy elision for piecewise construction P0475R1 9 Yes 19.29 (16.10)* Yes
std::bit_cast() P0476R2 11 14 19.27*

14.0.3*

Integral power-of-2 operations:

std::bit_ceil(), std::bit_floor(), std::bit_width(), std::has_single_bit()

P0556R3 P1956R1 9
(P0556R3)
10 (P1956R1)
9 (P0556R3)
12 (P1956R1)
19.25* (P0556R3)*
19.27* (P1956R1)*
19.28 (16.8)*

11.0.3* (P0556R3)
13.0.0* (P1956R1)

Improving the return value of erase-like algorithms P0646R1 9 10 19.21*

12.0.0*

std::destroying_delete P0722R3 9 9 19.27*

11.0.3*

std::is_nothrow_convertible P0758R1 9 9 19.23*

11.0.3*

Add std::shift_left/right to <algorithm> P0769R2 10 12 19.21*

13.0.0*

Constexpr for std::swap() and swap related functions P0879R0 10 13 19.26*

13.1.6*

std::type_identity P0887R1 9 8 19.21*

10.0.1*

Concepts library P0898R3 10 13 19.23*

13.1.6*

constexpr comparison operators for std::array P1023R0 10 8 19.27*

10.0.1*

std::unwrap_ref_decay and std::unwrap_reference P0318R1 9 8 19.21*

10.0.1*

std::bind_front() P0356R5 9 13 19.25*

13.1.6*

std::reference_wrapper for incomplete types P0357R3 9 8 19.26*

10.0.1*

Fixing operator>>(basic_istream&, CharT*) P0487R1 11 8 19.23*

10.0.1*

Library support for char8_t P0482R6 9 8 (partial)
16
19.22*

10.0.1* (partial)
15.0.0*

Utility functions to implement uses-allocator construction P0591R4 9 16 19.29 (16.10)*

15.0.0*

DR17: std::variant and std::optional should propagate copy/move triviality P0602R4 8.3 8 19.11*

10.0.1*

DR17: A sane std::variant converting constructor P0608R3 10 9 19.29 (16.10)**
19.42**

11.0.3*

std::function's move constructor should be noexcept P0771R1 7.2 6 19.22* Yes
The One Ranges Proposal P0896R4 10 13 (partial)
15*
19.29 (16.10)*

14.0.3*

Heterogeneous lookup for unordered containers P0919R3 P1690R1 11 12 19.23* (P0919R3)
19.25* (P1690R1)

13.0.0*

<chrono> zero(), min(), and max() should be noexcept P0972R0 9 8 19.14*

10.0.1*

constexpr in std::pointer_traits P1006R1 9 8 19.26*

10.0.1*

std::assume_aligned() P1007R3 9*
11
15 19.28 (16.9)*

14.0.3*

Smart pointer creation with default initialization (e.g. make_unique_for_overwrite) P1020R1
P1973R1
11 (unique_ptr)
12 (shared_ptr)
16 19.28 (16.9)*

15.0.0*

Misc constexpr bits P1032R1 10 13 19.28 (16.8)*

13.1.6*

Remove comparison operators of std::span P1085R2 10 8 19.26*

10.0.1*

Make stateful allocator propagation more consistent for operator+(basic_string) P1165R1 10 15 19.26*

14.0.3*

Consistent container erasure, e.g. std::erase(std::vector), or std::erase_if(std::map) P1209R0 P1115R3 9
(P1209R0)
10 (P1115R3)
8 (P1209R0)
11 (P1115R3)
19.25* (P1209R0)
19.27* (P1115R3)

10.0.1* (P1209R0)
12.0.5* (P1115R3)

Standard library header units P1502R1 11 19.29 (16.10)*
polymorphic_allocator<> as a vocabulary type P0339R6 9 16 19.28 (16.9)*

15.0.0*

std::execution::unseq P1001R2 9 17 19.28 (16.8)*
std::lerp() and std::midpoint() P0811R3 9 9 19.23* (partial)
19.28 (16.8)*

11.0.3*

Usability enhancements for std::span P1024R3 10 9*
14
19.26*

11.0.3*

DR17: Make create_directory() intuitive P1164R1 8.3 12 19.20*

13.0.0*

std::ssize() and unsigned extent for std::span P1227R2 10 9 19.25*

11.0.3*

Traits for (un)bounded arrays P1357R1 9 9 19.25*

11.0.3*

std::to_array() P0325R4 10 10 19.25*

12.0.0*

Efficient access to std::basic_stringbuf’s buffer P0408R7 11 17 19.29 (16.10)*

15.0.0*

Layout-compatibility and pointer-interconvertibility traits P0466R5 12 19.29 (16.10)**
Bit operations: std::

rotl(), rotr(), countl_zero(), countl_one(), countr_zero(), countr_one(), popcount()

P0553R4 9 9 19.25**
19.28 (16.8)*

11.0.3*

Mathematical constants P0631R8 10 11 19.25*

12.0.5*

Text formatting P0645R10 13 14*
17
19.29 (16.10)*

15.0.0*

std::stop_token and std::jthread P0660R10 10 17
(partial)*

20*
19.28 (16.9)*
constexpr std::allocator and related utilities P0784R7 10 12 19.29 (16.10)*

13.0.0*

constexpr std::string P0980R1 12 15 19.29 (16.10)*
19.30**

14.0.3*

constexpr std::vector P1004R2 12 15 19.29 (16.10)*
19.30**

14.0.3*

Input range adaptors P1035R7 10 16 19.29 (16.10)*

15.0.0*

constexpr std::invoke() and related utilities P1065R2 10 12 19.28 (16.8)*

13.0.0*

Atomic waiting and notifying, std::counting_semaphore, std::latch and std::barrier P1135R6 11 11 19.28 (16.8)*

13.1.6*

std::source_location P1208R6 11 15*
(partial)
16
19.29 (16.10)*

15.0.0*

Adding <=> to the standard library P1614R2 10 14*
(partial)
17*
(partial)
19
19.29 (16.10)*

13.1.6* (partial)

constexpr default constructor of std::atomic and std::atomic_flag P0883R2 10 13 19.26*

13.1.6*

constexpr for numeric algorithms P1645R1 10 12 19.26*

13.0.0*

Safe integral comparisons P0586R2 10 13 19.27*

13.1.6*

 

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*