Namespaces
Variants
Views
Actions

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

From cppreference.com
m (C++17 library features: #)
(FP => floating-point)
 
(10 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
===C++17 core language features===
 
===C++17 core language features===
 
{{compiler support|std=c++17|
 
{{compiler support|std=c++17|
<!-- 201402 -->
+
<!--201402-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature=DR11: New {{tt|auto}} rules for direct-list-initialization  
+
|feature=DR11: New {{tt|auto}} rules for direct-list-initialization  
| reference={{wg21|N3922}}
+
|reference={{wg21|N3922}}
| version=c++17
+
|version=c++17
| clang={{yes|3.8}}
+
|clang={{yes|3.8}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|5}}
+
|gcc={{yes|5}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{yes|{{msvc ver|2015}}}}
| icc={{yes|17.0}}
+
|icc={{yes|17.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| edg={{yes|4.10.1}}
+
|edg={{yes|4.10.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{ltt|cpp/language/static_assert}} with no message
+
|feature={{ltt|cpp/language/static_assert}} with no message
| reference={{wg21|N3928}}
+
|reference={{wg21|N3928}}
| version=c++17
+
|version=c++17
| clang={{yes|2.5}}
+
|clang={{yes|2.5}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| edg={{yes|4.12}}
+
|edg={{yes|4.12}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
<!-- 201405 -->
+
<!--201405-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{tt|typename}} in a template template parameter
+
|feature={{tt|typename}} in a template template parameter
| reference={{wg21|N4051}}
+
|reference={{wg21|N4051}}
| version=c++17
+
|version=c++17
| clang={{yes|3.5}}
+
|clang={{yes|3.5}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|5}}
+
|gcc={{yes|5}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{yes|{{msvc ver|2015}}}}
| icc={{yes|17.0}}
+
|icc={{yes|17.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| edg={{yes|4.10.1}}
+
|edg={{yes|4.10.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| nvcc={{yes|{{popup|Since at least 9.2; earliest version undocumented|Yes}}}}
+
|nvcc={{yes|{{popup|Since at least 9.2; earliest version undocumented|Yes}}}}
 
}}
 
}}
<!-- 201407 -->
+
<!--201407-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Removing [[cpp/language/operator_alternative#Trigraphs (removed in C++17)|trigraphs]]
+
|feature=Removing [[cpp/language/operator_alternative#Trigraphs (removed in C++17)|trigraphs]]
| reference={{wg21|N4086}}
+
|reference={{wg21|N4086}}
| version=c++17
+
|version=c++17
| gcc={{yes|5}}
+
|gcc={{yes|5}}
| clang={{yes|3.5}}
+
|clang={{yes|3.5}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2010}}}}
+
|msvc={{yes|{{msvc ver|2010}}}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
<!-- 201410 -->
+
<!--201410-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/namespace#Syntax|Nested namespace]] definition
+
|feature=[[cpp/language/namespace#Syntax|Nested namespace]] definition
| reference={{wg21|N4230}}
+
|reference={{wg21|N4230}}
| version=c++17
+
|version=c++17
| clang={{yes|3.6}}
+
|clang={{yes|3.6}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| icc={{yes|17.0}}
+
|icc={{yes|17.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| msvc={{yes|{{msvc ver|2015.3}}}}
+
|msvc={{yes|{{msvc ver|2015.3}}}}
| edg={{yes|4.12}}
+
|edg={{yes|4.12}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
<!-- 201411 -->
+
<!--201411-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/attributes|Attributes]] for namespaces and enumerators
+
|feature=[[cpp/language/attributes|Attributes]] for namespaces and enumerators
| reference={{wg21|N4266}}
+
|reference={{wg21|N4266}}
| version=c++17
+
|version=c++17
| clang={{yes|3.6}}
+
|clang={{yes|3.6}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|{{popup|namespace only|4.9 (partial)}}<br>6}}
+
|gcc={{yes|{{popup|namespace only|4.9 (partial)}}<br>6}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{yes|{{msvc ver|2015}}}}
| edg={{yes|4.11}}
+
|edg={{yes|4.11}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| icc={{yes|17.0}}
+
|icc={{yes|17.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/character literal|{{tt|u8}} character literals]]
+
|feature=[[cpp/language/character literal|{{tt|u8}} character literals]]
| reference={{wg21|N4267}}
+
|reference={{wg21|N4267}}
| version=c++17
+
|version=c++17
| clang={{yes|3.6}}
+
|clang={{yes|3.6}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{yes|{{msvc ver|2015}}}}
| icc={{yes|17.0}}
+
|icc={{yes|17.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| edg={{yes|4.11}}
+
|edg={{yes|4.11}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Allow constant evaluation for all non-type template arguments
+
|feature=Allow constant evaluation for all non-type template arguments
| reference={{wg21|N4268}}
+
|reference={{wg21|N4268}}
| version=c++17
+
|version=c++17
| clang={{yes|3.6}}
+
|clang={{yes|3.6}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
| icc={{yes|19.0.1}}
+
|icc={{yes|19.0.1}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/fold|Fold Expressions]]
+
|feature=[[cpp/language/fold|Fold Expressions]]
| reference={{wg21|N4295}}
+
|reference={{wg21|N4295}}
| version=c++17
+
|version=c++17
| clang={{yes|3.6}}
+
|clang={{yes|3.6}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|18.1}}
+
|pgi={{yes|18.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
<!-- 201509 -->
+
<!--201509-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/fold#Explanation|Unary fold expressions]] and empty parameter packs
+
|feature=[[cpp/language/fold#Explanation|Unary fold expressions]] and empty parameter packs
| reference={{wg21|P0036R0}}
+
|reference={{wg21|P0036R0}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
<!-- 201510 -->
+
<!--201510-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Remove Deprecated Use of the {{ltt|cpp/keyword/register}} Keyword
+
|feature=Remove Deprecated Use of the {{ltt|cpp/keyword/register}} Keyword
| reference={{wg21|P0001R1}}
+
|reference={{wg21|P0001R1}}
| version=c++17
+
|version=c++17
| clang={{yes|3.8}}
+
|clang={{yes|3.8}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.13}}
+
|edg={{yes|4.13}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Remove Deprecated {{tt|operator++(bool)}}
+
|feature=Remove Deprecated {{tt|operator++(bool)}}
| reference={{wg21|P0002R1}}
+
|reference={{wg21|P0002R1}}
| version=c++17
+
|version=c++17
| clang={{yes|3.8}}
+
|clang={{yes|3.8}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.13}}
+
|edg={{yes|4.13}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Make exception specifications part of the type system
+
|feature=Make exception specifications part of the type system
| reference={{wg21|P0012R1}}
+
|reference={{wg21|P0012R1}}
| version=c++17
+
|version=c++17
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/aggregate initialization|Aggregate classes]] with base classes
+
|feature=[[cpp/language/aggregate initialization|Aggregate classes]] with base classes
| reference={{wg21|P0017R1}}
+
|reference={{wg21|P0017R1}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| icc={{yes|19.0.1}}
+
|icc={{yes|19.0.1}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{ltt|cpp/preprocessor/include|__has_include}} in preprocessor conditionals
+
|feature={{ltt|cpp/preprocessor/include|__has_include}} in preprocessor conditionals
| reference={{wg21|P0061R1}}
+
|reference={{wg21|P0061R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|5}}
+
|gcc={{yes|5}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| clang={{yes}}
+
|clang={{yes}}
| aclang={{yes}}
+
|aclang={{yes}}
| edg={{yes|4.13}}
+
|edg={{yes|4.13}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=DR11: New specification for [[cpp/language/using declaration#Inheriting constructors|inheriting constructors]] (DR1941 et al)
+
|feature=DR11: New specification for [[cpp/language/using declaration#Inheriting constructors|inheriting constructors]] (DR1941 et al)
| reference={{wg21|P0136R1}}
+
|reference={{wg21|P0136R1}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|  {{popup|{{{hint|{{msvc ver/title|2017.7}}}}}. Not supported in C++14 mode|{{msvc ver/num|2017.7}} (partial)}}  }}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| edg={{yes|6.1}}
+
|edg={{yes|6.1}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
<!-- 201602 -->
+
<!--201602-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Lambda capture of {{tt|*this}}
+
|feature=Lambda capture of {{tt|*this}}
| reference={{wg21|P0018R3}}
+
|reference={{wg21|P0018R3}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|18.1}}
+
|pgi={{yes|18.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Direct-list-initialization of enumerations
+
|feature=Direct-list-initialization of enumerations
| reference={{wg21|P0138R2}}
+
|reference={{wg21|P0138R2}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/lambda|constexpr lambda expressions]]
+
|feature=[[cpp/language/lambda|constexpr lambda expressions]]
| reference={{wg21|P0170R1}}
+
|reference={{wg21|P0170R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| clang={{yes|5}}
+
|clang={{yes|5}}
| aclang={{yes}}
+
|aclang={{yes}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|18.1}}
+
|pgi={{yes|18.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Differing begin and end types in [[cpp/language/range-for|range-based for]]
+
|feature=Differing begin and end types in [[cpp/language/range-for|range-based for]]
| reference={{wg21|P0184R0}}
+
|reference={{wg21|P0184R0}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| edg={{yes|4.12}}
+
|edg={{yes|4.12}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{attr|fallthrough}} [[cpp/language/attributes|attribute]]
+
|feature={{attr|fallthrough}} [[cpp/language/attributes|attribute]]
| reference={{wg21|P0188R1}}
+
|reference={{wg21|P0188R1}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.13}}
+
|edg={{yes|4.13}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{attr|nodiscard}} [[cpp/language/attributes|attribute]]
+
|feature={{attr|nodiscard}} [[cpp/language/attributes|attribute]]
| reference={{wg21|P0189R1}}
+
|reference={{wg21|P0189R1}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.13}}
+
|edg={{yes|4.13}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature={{attr|maybe_unused}} [[cpp/language/attributes|attribute]]
+
|feature={{attr|maybe_unused}} [[cpp/language/attributes|attribute]]
| reference={{wg21|P0212R1}}
+
|reference={{wg21|P0212R1}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.13}}
+
|edg={{yes|4.13}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Hexadecimal [[cpp/language/floating literal|floating-point literals]]
+
|feature=Hexadecimal [[cpp/language/floating literal|floating-point literals]]
| reference={{wg21|P0245R1}}
+
|reference={{wg21|P0245R1}}
| version=c++17
+
|version=c++17
| clang={{yes}}
+
|clang={{yes}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|3.0}}
+
|gcc={{yes|3.0}}
| edg={{yes|4.13}}
+
|edg={{yes|4.13}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
<!-- 201606 -->
+
<!--201606-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Using attribute namespaces without repetition
+
|feature=Using attribute namespaces without repetition
| reference={{wg21|P0028R4}}
+
|reference={{wg21|P0028R4}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.13}}
+
|edg={{yes|4.13}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/new|Dynamic memory allocation]] for over-aligned data
+
|feature=[[cpp/language/new|Dynamic memory allocation]] for over-aligned data
| reference={{wg21|P0035R4}}
+
|reference={{wg21|P0035R4}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/class template argument deduction|Class template argument deduction]]
+
|feature=[[cpp/language/class template argument deduction|Class template argument deduction]]
| reference={{wg21|P0091R3}}
+
|reference={{wg21|P0091R3}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| clang={{yes|5}}
+
|clang={{yes|5}}
| aclang={{yes}}
+
|aclang={{yes}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| icc={{yes|19.0.1}}
+
|icc={{yes|19.0.1}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Non-type template parameters with {{tt|auto}} type
+
|feature=Non-type template parameters with {{tt|auto}} type
| reference={{wg21|P0127R2}}
+
|reference={{wg21|P0127R2}}
| version=c++17
+
|version=c++17
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| icc={{yes|19.0.1}}
+
|icc={{yes|19.0.1}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Guaranteed [[cpp/language/copy elision|copy elision]]
+
|feature=Guaranteed [[cpp/language/copy elision|copy elision]]
| reference={{wg21|P0135R1}}
+
|reference={{wg21|P0135R1}}
| version=c++17
+
|version=c++17
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.6}}}}
+
|msvc={{yes|{{msvc ver|2017.6}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| icc={{yes|19.0.1}}
+
|icc={{yes|19.0.1}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Replacement of class objects containing reference members
+
|feature=Replacement of class objects containing reference members
| reference={{wg21|P0137R1}}
+
|reference={{wg21|P0137R1}}
| version=c++17
+
|version=c++17
| clang={{yes|6}}
+
|clang={{yes|6}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Stricter [[cpp/language/eval order|expression evaluation order]]
+
|feature=Stricter [[cpp/language/eval order|expression evaluation order]]
| reference={{wg21|P0145R3}}
+
|reference={{wg21|P0145R3}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| icc={{yes|19.0.1}}
+
|icc={{yes|19.0.1}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/structured binding|Structured Bindings]]
+
|feature=[[cpp/language/structured binding|Structured Bindings]]
| reference={{wg21|P0217R3}}
+
|reference={{wg21|P0217R3}}
| version=c++17
+
|version=c++17
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|18.1}}
+
|pgi={{yes|18.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|{{popup|cannot be declared with a variable memory space specifier.|11.0}}}}
+
|nvcc={{yes|{{popup|cannot be declared with a variable memory space specifier.|11.0}}}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Ignore unknown [[cpp/language/attributes|attributes]]
+
|feature=Ignore unknown [[cpp/language/attributes|attributes]]
| reference={{wg21|P0283R2}}
+
|reference={{wg21|P0283R2}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes}}
+
|gcc={{yes}}
| edg={{yes|4.13}}
+
|edg={{yes|4.13}}
| pgi={{yes|17.7}}
+
|pgi={{yes|17.7}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/if|constexpr if]] statements
+
|feature=[[cpp/language/if|constexpr if]] statements
| reference={{wg21|P0292R2}}
+
|reference={{wg21|P0292R2}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|18.1}}
+
|pgi={{yes|18.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=init-statements for [[cpp/language/if|if]] and [[cpp/language/switch|switch]]
+
|feature=init-statements for [[cpp/language/if|if]] and [[cpp/language/switch|switch]]
| reference={{wg21|P0305R1}}
+
|reference={{wg21|P0305R1}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|18.0}}
+
|icc={{yes|18.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|18.1}}
+
|pgi={{yes|18.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=[[cpp/language/inline|Inline variables]]
+
|feature=[[cpp/language/inline|Inline variables]]
| reference={{wg21|P0386R2}}
+
|reference={{wg21|P0386R2}}
| version=c++17
+
|version=c++17
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|18.1}}
+
|pgi={{yes|18.1}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
<!-- 201611 -->
+
<!--201611-->
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Removing [[cpp/language/except spec|dynamic exception specifications]]
+
|feature=Removing [[cpp/language/except spec|dynamic exception specifications]]
| reference={{wg21|P0003R5}}
+
|reference={{wg21|P0003R5}}
| version=c++17
+
|version=c++17
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|4.14}}
+
|edg={{yes|4.14}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=Pack expansions in using-declarations
+
|feature=Pack expansions in using-declarations
| reference={{wg21|P0195R2}}
+
|reference={{wg21|P0195R2}}
| version=c++17
+
|version=c++17
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| icc={{yes|19.0}}
+
|icc={{yes|19.0}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
{{compiler_support_row
 
{{compiler_support_row
| feature=DR98: Matching of template template-arguments excludes compatible templates
+
|feature=DR98: Matching of template template-arguments excludes compatible templates
| reference={{wg21|P0522R0}}
+
|reference={{wg21|P0522R0}}
| version=c++17
+
|version=c++17
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
| icc={{yes|19.0.1}}
+
|icc={{yes|19.0.1}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| ibmopenxlzos={{yes|1.1.0}}
+
|ibmopenxlzos={{yes|1.1.0}}
| edg={{yes|5.0}}
+
|edg={{yes|5.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
| pgi={{yes|19.1}}
+
|pgi={{yes|19.1}}
| cray={{yes|11.0}}
+
|cray={{yes|11.0}}
| nvcc={{yes|11.0}}
+
|nvcc={{yes|11.0}}
 
}}
 
}}
 
}}
 
}}
Line 675: Line 675:
 
===C++17 library features===
 
===C++17 library features===
 
{{standard library support|std=c++17|
 
{{standard library support|std=c++17|
<!-- 201402 -->
+
<!--201402-->
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::void_t}}
+
|feature={{lc|std::void_t}}
| reference={{wg21|N3911}}
+
|reference={{wg21|N3911}}
| version=c++17
+
|version=c++17
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| clang={{yes|3.6}}
+
|clang={{yes|3.6}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{yes|{{msvc ver|2015}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
<!-- 201411 -->
+
<!--201411-->
 
{{standard library support row
 
{{standard library support row
| feature={{ltf|cpp/error/uncaught_exception|std::uncaught_exceptions}}
+
|feature={{ltf|cpp/error/uncaught_exception|std::uncaught_exceptions}}
| reference={{wg21|N4259}}
+
|reference={{wg21|N4259}}
| version=c++17
+
|version=c++17
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| clang={{yes|3.7}}
+
|clang={{yes|3.7}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{yes|{{msvc ver|2015}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::size()}}, {{lc|std::empty()}} and {{lc|std::data()}}
+
|feature={{lc|std::size()}}, {{lc|std::empty()}} and {{lc|std::data()}}
| reference={{wg21|N4280}}
+
|reference={{wg21|N4280}}
| version=c++17
+
|version=c++17
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| clang={{yes|3.6}}
+
|clang={{yes|3.6}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{yes|{{msvc ver|2015}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
<!-- 201504 -->
+
<!--201504-->
 
{{standard library support row
 
{{standard library support row
| feature=Improving {{lc|std::pair}} and {{lc|std::tuple}}
+
|feature=Improving {{lc|std::pair}} and {{lc|std::tuple}}
| reference={{wg21|N4387}}
+
|reference={{wg21|N4387}}
| version=c++17
+
|version=c++17
| msvc={{yes|{{msvc ver|2015.2}}}}
+
|msvc={{yes|{{msvc ver|2015.2}}}}
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::bool_constant}}
+
|feature={{lc|std::bool_constant}}
| reference={{wg21|N4389}}
+
|reference={{wg21|N4389}}
| version=c++17
+
|version=c++17
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| clang={{yes|3.7}}
+
|clang={{yes|3.7}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2015}}}}
+
|msvc={{yes|{{msvc ver|2015}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
<!-- 201505 -->
+
<!--201505-->
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::shared_mutex}} (untimed)
+
|feature={{lc|std::shared_mutex}} (untimed)
| reference={{wg21|N4508}}
+
|reference={{wg21|N4508}}
| version=c++17
+
|version=c++17
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| msvc={{yes|{{msvc ver|2015.2|hint=VS 2015 Update 2 & Windows 7}}}}
+
|msvc={{yes|{{msvc ver|2015.2|hint=VS 2015 Update 2 & Windows 7}}}}
| clang={{yes|3.7}}
+
|clang={{yes|3.7}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
<!-- 201510 -->
+
<!--201510-->
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/meta|Type traits]] variable templates
+
|feature=[[cpp/meta|Type traits]] variable templates
| reference={{wg21|P0006R0}}
+
|reference={{wg21|P0006R0}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|3.8}}
+
|clang={{yes|3.8}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2015.2}}}}
+
|msvc={{yes|{{msvc ver|2015.2}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/meta#Operations on traits|Logical operator type traits]]
+
|feature=[[cpp/meta#Operations on traits|Logical operator type traits]]
| reference={{wg21|P0013R1}}
+
|reference={{wg21|P0013R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|6}}
+
|gcc={{yes|6}}
| clang={{yes|3.8}}
+
|clang={{yes|3.8}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2015.2}}}}
+
|msvc={{yes|{{msvc ver|2015.2}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
<!-- 201603 -->
+
<!--201603-->
 
{{standard library support row
 
{{standard library support row
| feature=Parallel algorithms and execution policies
+
|feature=Parallel algorithms and execution policies
| reference={{wg21|P0024R2}}
+
|reference={{wg21|P0024R2}}
| version=c++17
+
|version=c++17
| gcc={{yes|{{popup|requires linking with -ltbb|9}}}}
+
|gcc={{yes|{{popup|requires linking with -ltbb|9}}}}
| clang={{maybe|{{popup|Experimental support (requires -fexperimental-library compiler flag), see https://libcxx.llvm.org/Status/PSTL.html|17<br>(partial)}}}}
+
|clang={{maybe|{{popup|Experimental support (requires -fexperimental-library compiler flag), see https://libcxx.llvm.org/Status/PSTL.html|17<br>(partial)}}}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| icc={{yes|{{popup|requires non-standard headers|18.0}}}}
+
|icc={{yes|{{popup|requires non-standard headers|18.0}}}}
 
}}
 
}}
 
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::clamp()}}
+
|feature={{lc|std::clamp()}}
| reference={{wg21|P0025R0}}
+
|reference={{wg21|P0025R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2015.3}}}}
+
|msvc={{yes|{{msvc ver|2015.3}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/thread/hardware_destructive_interference_size|Hardware interference size]]
+
|feature=[[cpp/thread/hardware_destructive_interference_size|Hardware interference size]]
| reference={{wg21|P0154R1}}
+
|reference={{wg21|P0154R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|12}}
+
|gcc={{yes|12}}
| clang={{yes|15}}
+
|clang={{yes|{{popup|GCC-only|15 (partial)}}<br>19}}
| clang={{maybe|{{popup|GCC-only|15 (partial)}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|embar={{yes|10.3}}
| embar={{yes|10.3}}
+
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/types/is_swappable|(nothrow-)swappable traits]]
+
|feature=[[cpp/types/is_swappable|(nothrow-)swappable traits]]
| reference={{wg21|P0185R1}}
+
|reference={{wg21|P0185R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2015.3}}}}
+
|msvc={{yes|{{msvc ver|2015.3}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/filesystem|File system library]]
+
|feature=[[cpp/filesystem|File system library]] ({{lc|std::filesystem}})
| reference={{wg21|P0218R1}}
+
|reference={{wg21|P0218R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|8}}
+
|gcc={{yes|8}}
| clang={{yes|7}}
+
|clang={{yes|7}}
| aclang={{yes|{{aclang ver|11.0.0}}}}
+
|aclang={{yes|{{aclang ver|11.0.0|hint={{aclang ver/num|11.0.0}}. Must target macOS 10.15 or newer}}}}
| ibmopenxlaix={{yes|17.1.1}}
+
|ibmopenxlaix={{yes|17.1.1}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::string_view}}
+
|feature={{lc|std::string_view}}
| reference={{wg21|N3921}}<br>{{wg21|P0220R1}}
+
|reference={{wg21|N3921}}<br>{{wg21|P0220R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::any}}
+
|feature={{lc|std::any}}
| reference={{wg21|P0220R1}}
+
|reference={{wg21|P0220R1}}
| version=c++17
+
|version=c++17
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::optional}}
+
|feature={{lc|std::optional}}
| reference={{wg21|P0220R1}}
+
|reference={{wg21|P0220R1}}
| version=c++17
+
|version=c++17
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/header/memory_resource|Polymorphic memory resources]]
+
|feature=[[cpp/header/memory_resource|Polymorphic memory resources]]
| reference={{wg21|P0220R1}}
+
|reference={{wg21|P0220R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| clang={{yes|16}}
+
|clang={{yes|16}}
| msvc={{yes|{{msvc ver|2017.6}}}}
+
|msvc={{yes|{{msvc ver|2017.6}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 +
|aclang={{yes|{{aclang ver|15.0.0}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=[[cpp/numeric/special functions|Mathematical special functions]]
+
|feature=[[cpp/numeric/special functions|Mathematical special functions]]
| reference={{wg21|P0226R1}}
+
|reference={{wg21|P0226R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| msvc={{yes|{{msvc ver|2017.7}}}}
+
|msvc={{yes|{{msvc ver|2017.7}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
<!-- 201606 -->
+
<!--201606-->
 
{{standard library support row
 
{{standard library support row
| feature=Major portion of C11 standard library
+
|feature=Major portion of C11 standard library
| reference={{wg21|P0063R3}}
+
|reference={{wg21|P0063R3}}
| version=c++17
+
|version=c++17
| clang={{yes|7}}
+
|clang={{yes|7}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| ibmopenxlaix={{yes|17.1.1}}
+
|ibmopenxlaix={{yes|17.1.1}}
| gcc={{yes|9}}
+
|gcc={{yes|9}}
| msvc={{maybe|{{msvc ver|2015}}<br>{{popup|missing aligned_alloc() mainly|(partial)}}}}
+
|msvc={{maybe|{{msvc ver|2015}}<br>{{popup|missing aligned_alloc() mainly|(partial)}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=Splicing {{ltt|cpp/container/map/merge|Maps}} and {{ltt|cpp/container/set/merge|Sets}}
+
|feature=Splicing {{ltt|cpp/container/map/merge|Maps}} and {{ltt|cpp/container/set/merge|Sets}}
| reference={{wg21|P0083R3}}
+
|reference={{wg21|P0083R3}}
| version=c++17
+
|version=c++17
| clang={{yes|8}}
+
|clang={{yes|8}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| ibmopenxlaix={{yes|17.1.1}}
+
|ibmopenxlaix={{yes|17.1.1}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=return type of {{ltt|cpp/container#Function table|emplace}}* functions of some {{lt|cpp/container}}s changed from {{c|void}} to {{tt|reference}}
+
|feature=return type of {{ltt|cpp/container#Function table|emplace}}* functions of some {{lt|cpp/container}}s changed from {{c/core|void}} to {{tt|reference}}
| reference={{wg21|P0084R2}}
+
|reference={{wg21|P0084R2}}
| version=c++17
+
|version=c++17
| gcc={{yes|7.1}}
+
|gcc={{yes|7.1}}
| clang={{yes|4.0}}
+
|clang={{yes|4.0}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::variant}}
+
|feature={{lc|std::variant}}
| reference={{wg21|P0088R3}}
+
|reference={{wg21|P0088R3}}
| version=c++17
+
|version=c++17
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes|{{aclang ver|10.0.0}}}}
+
|aclang={{yes|{{aclang ver|10.0.0}}}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::make_from_tuple()}}
+
|feature={{lc|std::make_from_tuple()}}
| reference={{wg21|P0209r2}}
+
|reference={{wg21|P0209r2}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2017}}}}
+
|msvc={{yes|{{msvc ver|2017}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::has_unique_object_representations}}
+
|feature={{lc|std::has_unique_object_representations}}
| reference={{wg21|P0258R2}}
+
|reference={{wg21|P0258R2}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|6}}
+
|clang={{yes|6}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.1}}
+
|ibmopenxlaix={{yes|17.1.1}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::gcd()}} and {{lc|std::lcm()}}
+
|feature={{lc|std::gcd()}} and {{lc|std::lcm()}}
| reference={{wg21|P0295R0}}
+
|reference={{wg21|P0295R0}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|4}}
+
|clang={{yes|4}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::not_fn}}
+
|feature={{lc|std::not_fn}}
| reference={{wg21|P0005R4}}<br>{{wg21|P0358R1}}
+
|reference={{wg21|P0005R4}}<br>{{wg21|P0358R1}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|3.9}}
+
|clang={{yes|3.9}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.0}}
+
|ibmopenxlaix={{yes|17.1.0}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
<!-- 201611 -->
+
<!--201611-->
 
{{standard library support row
 
{{standard library support row
| feature={{ls|cpp/utility#Elementary string conversions}}{{popup|including status of floating-point (FP) values support}}
+
|feature={{ls|cpp/utility#Elementary string conversions}}: {{c/core|std::to_chars}}/{{c/core|std::from_chars}}
| reference={{wg21|P0067R5}}
+
|reference={{wg21|P0067R5}}
| version=c++17
+
|version=c++17
| gcc={{yes|8 (no FP)<br>11}}
+
|gcc={{yes|{{popup|no floating-point values support|8}}<br>11}}
| embar={{maybe|10.3 (no FP from_chars)}}
+
|embar={{maybe|{{popup|no floating-point from_chars|10.3}}}}
| clang={{maybe|7 (no FP)<br>14 (no FP from_chars)}}
+
|clang={{maybe|{{popup|no floating-point values support|7}}<br>{{popup|no floating-point from_chars;&#10;<!--
| aclang={{maybe|{{aclang ver|10.0.0}} (no FP)}}
+
-->to_chars for long double uses the implementation for double|14}}<br>{{popup|no from_chars for long double;&#10;<!--
| ibmopenxlaix={{maybe|17.1.1 (no FP from_chars)}}
+
-->to_chars for long double uses the implementation for double|20}}}}
| msvc={{yes|{{msvc ver|2017.7}} (no FP){{popup|<!--
+
|aclang={{maybe|{{aclang ver|10.0.0}}{{popup|no floating-point values support}}}}
-->19.15 / VS 2017 15.8: FP from_chars().&#10;<!--
+
|ibmopenxlaix={{maybe|{{popup|no floating-point from_chars|17.1.1}}}}
-->19.16 / VS 2017 15.9: FP to_chars() overloads for shortest decimal.&#10;<!--
+
|msvc={{yes|{{msvc ver|2017.7}}{{popup|<!--
-->19.20 / VS 2019 16.0: FP to_chars() overloads for shortest hex and precision hex.&#10;<!--
+
-->19.15 / VS 2017 15.8: floating-point from_chars().&#10;<!--
-->19.22 / VS 2019 16.2: FP to_chars() overloads for precision fixed and precision scientific."}}<br>{{msvc ver|2019.4}}}}
+
-->19.16 / VS 2017 15.9: floating-point to_chars() overloads for shortest decimal.&#10;<!--
 +
-->19.20 / VS 2019 16.0: floating-point to_chars() overloads for shortest hex and precision hex.&#10;<!--
 +
-->19.22 / VS 2019 16.2: floating-point to_chars() overloads for precision fixed and precision scientific.}}<br>{{msvc ver|2019.4}}}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{lc|std::shared_ptr}} and {{lc|std::weak_ptr}} with array support
+
|feature={{lc|std::shared_ptr}} and {{lc|std::weak_ptr}} with array support
| reference={{wg21|P0414R2}}
+
|reference={{wg21|P0414R2}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|11}}
+
|clang={{yes|11}}
| aclang={{yes|{{aclang ver|12.0.0}}}}
+
|aclang={{yes|{{aclang ver|12.0.0}}}}
| ibmopenxlaix={{yes|17.1.1}}
+
|ibmopenxlaix={{yes|17.1.1}}
| msvc={{yes|{{msvc ver|2017.5}}}}
+
|msvc={{yes|{{msvc ver|2017.5}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
<!-- 201703 -->
+
<!--201703-->
 
{{standard library support row
 
{{standard library support row
| feature={{ltt|cpp/thread/scoped_lock|std::scoped_lock}}
+
|feature={{ltt|cpp/thread/scoped_lock|std::scoped_lock}}
| reference={{wg21|P0156R2}}
+
|reference={{wg21|P0156R2}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|5}}
+
|clang={{yes|5}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.1}}
+
|ibmopenxlaix={{yes|17.1.1}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{ltt|cpp/types/byte|std::byte}}
+
|feature={{ltt|cpp/types/byte|std::byte}}
| reference={{wg21|P0298R3}}
+
|reference={{wg21|P0298R3}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|5}}
+
|clang={{yes|5}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.1}}
+
|ibmopenxlaix={{yes|17.1.1}}
| msvc={{yes|{{msvc ver|2017.3}}}}
+
|msvc={{yes|{{msvc ver|2017.3}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature={{ltt|cpp/types/is_aggregate|std::is_aggregate}}
+
|feature={{ltt|cpp/types/is_aggregate|std::is_aggregate}}
| reference={{wg21|LWG2911}}
+
|reference={{wg21|LWG2911}}
| version=c++17
+
|version=c++17
| gcc={{yes|7}}
+
|gcc={{yes|7}}
| clang={{yes|5}}
+
|clang={{yes|5}}
| aclang={{yes}}
+
|aclang={{yes}}
| ibmopenxlaix={{yes|17.1.1}}
+
|ibmopenxlaix={{yes|17.1.1}}
| msvc={{yes|{{msvc ver|2017.8}}}}
+
|msvc={{yes|{{msvc ver|2017.8}}}}
| embar={{yes|10.3}}
+
|embar={{yes|10.3}}
 
}}
 
}}
 
{{standard library support row
 
{{standard library support row
| feature=DR17: {{ltt|cpp/filesystem/path/hash|std::hash<std::filesystem::path>}}
+
|feature=DR17: {{ltt|cpp/filesystem/path/hash|std::hash<std::filesystem::path>}}
| reference={{wg21|LWG3657}}
+
|reference={{wg21|LWG3657}}
| version=c++17
+
|version=c++17
| gcc={{yes|11.4}}
+
|gcc={{yes|11.4}}
| msvc={{yes|{{msvc ver|19.32}}}}
+
|msvc={{yes|{{msvc ver|19.32}}}}
| clang={{yes|17}}
+
|clang={{yes|17}}
 
}}
 
}}
 
}}
 
}}

Latest revision as of 03:48, 2 November 2024

[edit] C++17 core language features

C++17 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
DR11: New auto rules for direct-list-initialization N3922 5 3.8 19.0 (2015)* Yes 4.10.1 17.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
static_assert with no message N3928 6 2.5 19.10* Yes 4.12 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
typename in a template template parameter N4051 5 3.5 19.0 (2015)* Yes 4.10.1 17.0 17.1.0 1.1.0 10.3 11.0 17.7 Yes*
Removing trigraphs N4086 5 3.5 16.0* Yes 5.0 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Nested namespace definition N4230 6 3.6 19.0 (Update 3)* Yes 4.12 17.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
Attributes for namespaces and enumerators N4266 4.9 (partial)*
6
3.6 19.0 (2015)* Yes 4.11 17.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
u8 character literals N4267 6 3.6 19.0 (2015)* Yes 4.11 17.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
Allow constant evaluation for all non-type template arguments N4268 6 3.6 19.12* Yes 5.0 19.0.1 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Fold Expressions N4295 6 3.6 19.12* Yes 4.14 19.0 17.1.0 1.1.0 10.3 11.0 18.1 11.0
Unary fold expressions and empty parameter packs P0036R0 6 3.9 19.12* Yes 4.14 19.0 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Remove Deprecated Use of the register Keyword P0001R1 7 3.8 19.11* Yes 4.13 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
Remove Deprecated operator++(bool) P0002R1 7 3.8 19.11* Yes 4.13 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
Make exception specifications part of the type system P0012R1 7 4 19.12* Yes 4.14 19.0 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Aggregate classes with base classes P0017R1 7 3.9 19.14* Yes 5.0 19.0.1 17.1.0 1.1.0 10.3 11.0 19.1 11.0
__has_include in preprocessor conditionals P0061R1 5 Yes 19.11* Yes 4.13 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
DR11: New specification for inheriting constructors (DR1941 et al) P0136R1 7 3.9 19.14 (partial)* Yes 6.1 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Lambda capture of *this P0018R3 7 3.9 19.11* Yes 4.14 19.0 17.1.0 1.1.0 10.3 11.0 18.1 11.0
Direct-list-initialization of enumerations P0138R2 7 3.9 19.11* Yes 4.14 18.0 17.1.0 1.1.0 10.3 11.0 19.1 11.0
constexpr lambda expressions P0170R1 7 5 19.11* Yes 4.14 19.0 17.1.0 1.1.0 10.3 11.0 18.1 11.0
Differing begin and end types in range-based for P0184R0 6 3.9 19.10* Yes 4.12 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
[[fallthrough]] attribute P0188R1 7 3.9 19.10* Yes 4.13 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
[[nodiscard]] attribute P0189R1 7 3.9 19.11* Yes 4.13 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
[[maybe_unused]] attribute P0212R1 7 3.9 19.11* Yes 4.13 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
Hexadecimal floating-point literals P0245R1 3.0 Yes 19.11* Yes 4.13 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
Using attribute namespaces without repetition P0028R4 7 3.9 19.11* Yes 4.13 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
Dynamic memory allocation for over-aligned data P0035R4 7 4 19.12*

10.0.0*

4.14 19.0 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Class template argument deduction P0091R3 7 5 19.14* Yes 5.0 19.0.1 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Non-type template parameters with auto type P0127R2 7 4 19.14* Yes 5.0 19.0.1 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Guaranteed copy elision P0135R1 7 4 19.13* Yes 5.0 19.0.1 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Replacement of class objects containing reference members P0137R1 7 6 19.14* Yes 5.0 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Stricter expression evaluation order P0145R3 7 4 19.14* Yes 5.0 19.0.1 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Structured Bindings P0217R3 7 4 19.11* Yes 4.14 19.0 17.1.0 1.1.0 10.3 11.0 18.1 11.0*
Ignore unknown attributes P0283R2 Yes 3.9 19.11* Yes 4.13 18.0 17.1.0 1.1.0 10.3 11.0 17.7 11.0
constexpr if statements P0292R2 7 3.9 19.11* Yes 4.14 19.0 17.1.0 1.1.0 10.3 11.0 18.1 11.0
init-statements for if and switch P0305R1 7 3.9 19.11* Yes 4.14 18.0 17.1.0 1.1.0 10.3 11.0 18.1 11.0
Inline variables P0386R2 7 3.9 19.12* Yes 4.14 19.0 17.1.0 1.1.0 10.3 11.0 18.1 11.0
Removing dynamic exception specifications P0003R5 7 4 19.10* Yes 4.14 19.0 17.1.0 1.1.0 10.3 11.0 19.1 11.0
Pack expansions in using-declarations P0195R2 7 4 19.14* Yes 5.0 19.0 17.1.0 1.1.0 10.3 11.0 19.1 11.0
DR98: Matching of template template-arguments excludes compatible templates P0522R0 7 4 19.12* Yes 5.0 19.0.1 17.1.0 1.1.0 10.3 11.0 19.1 11.0
 

C++17 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++17 library features

C++17 feature

 
Paper(s)

 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Sun/Oracle C++*
Embarcadero C++ Builder*
std::void_t N3911 6 3.6 19.0 (2015)* Yes 17.1.0 N/A 10.3
std::uncaught_exceptions() N4259 6 3.7 19.0 (2015)* Yes 17.1.0 N/A 10.3
std::size(), std::empty() and std::data() N4280 6 3.6 19.0 (2015)* Yes 17.1.0 N/A 10.3
Improving std::pair and std::tuple N4387 6 4 19.0 (Update 2)* Yes 17.1.0 N/A 10.3
std::bool_constant N4389 6 3.7 19.0 (2015)* Yes 17.1.0 N/A 10.3
std::shared_mutex (untimed) N4508 6 3.7 19.0 (Update 2)* Yes 17.1.0 N/A 10.3
Type traits variable templates P0006R0 7 3.8 19.0 (Update 2)* Yes 17.1.0 N/A 10.3
Logical operator type traits P0013R1 6 3.8 19.0 (Update 2)* Yes 17.1.0 N/A 10.3
Parallel algorithms and execution policies P0024R2 9* 17
(partial)*
19.14* 18.0*
std::clamp() P0025R1 7 3.9 19.0 (Update 3)*

10.0.0*

17.1.0 N/A 10.3
Hardware interference size P0154R1 12 15 (partial)*
19
19.11* N/A 10.3
(nothrow-)swappable traits P0185R1 7 3.9 19.0 (Update 3)*

10.0.0*

17.1.0 N/A 10.3
File system library (std::filesystem) P0218R1 8 7 19.14*

11.0.0*

17.1.1 N/A 10.3
std::string_view N3921
P0220R1
7 4 19.10*

10.0.0*

17.1.0 N/A 10.3
std::any P0220R1 7 4 19.10*

10.0.0*

17.1.0 N/A 10.3
std::optional P0220R1 7 4 19.10*

10.0.0*

17.1.0 N/A 10.3
Polymorphic memory resources P0220R1 9 16 19.13*

15.0.0*

N/A 10.3
Mathematical special functions P0226R1 7 19.14* N/A 10.3
Major portion of C11 standard library P0063R3 9 7 19.0 (2015)*
(partial)*

10.0.0*

17.1.1 N/A
Splicing Maps and Sets P0083R3 7 8 19.12*

10.0.0*

17.1.1 N/A
return type of emplace* functions of some containers changed from void to reference P0084R2 7.1 4.0 19.11* Yes 17.1.0 N/A
std::variant P0088R3 7 4 19.10*

10.0.0*

17.1.0 N/A 10.3
std::make_from_tuple() P0209R2 7 3.9 19.10* Yes 17.1.0 N/A 10.3
std::has_unique_object_representations P0258R2 7 6 19.11* Yes 17.1.1 N/A 10.3
std::gcd() and std::lcm() P0295R0 7 4 19.11* Yes 17.1.0 N/A 10.3
std::not_fn P0005R4
P0358R1
7 3.9 19.12* Yes 17.1.0 N/A 10.3
Elementary string conversions: std::to_chars/std::from_chars P0067R5 8*
11
7*
14*
20*
19.14**
19.24*

10.0.0**

17.1.1* N/A 10.3*
std::shared_ptr and std::weak_ptr with array support P0414R2 7 11 19.12*

12.0.0*

17.1.1 N/A 10.3
std::scoped_lock P0156R2 7 5 19.11* Yes 17.1.1 N/A 10.3
std::byte P0298R3 7 5 19.11* Yes 17.1.1 N/A 10.3
std::is_aggregate LWG2911 7 5 19.15* Yes 17.1.1 N/A 10.3
DR17: std::hash<std::filesystem::path> LWG3657 11.4 17 19.32* N/A
 

C++17 feature
 

Paper(s)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Sun/Oracle C++*
Embarcadero C++ Builder*
[edit] Notes
  • As of 2020-11-20, the latest release of Oracle Developer Studio is 12.6. Its documentation does not mention C++17.
  • Cray compiler may have support for some features earlier than 11.0. That version is when it became a derivative of Clang, gaining all of the attendant language feature support of the base compiler. See Cray/HPE document S-2179.