From cppreference.com
* - hover over a cell marked with the star * to see additional pop-up notes.
DRnn - the number nn after "DR" denotes target C++ revision the Defect Report is applied to, e.g., DR20 → C++20.
C++17 core language features
C++17 featurePaper(s)GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ for AIX
DR11: New
rules for direct-list-initialization
5 3.8 19.0 (2015)*Yes 4.10.1 17.0 17.7 11.0 11.0 10.3 17.1.0 typename in a template template parameter
5 3.5 19.0 (2015)*Yes 4.10.1 17.0 17.7 Yes*11.0 10.3 17.1.0 Removing
5 3.5 16.0*Yes 5.0 19.1 11.0 11.0 10.3 17.1.0
definition
6 3.6 19.0 (Update 3)*Yes 4.12 17.0 17.7 11.0 11.0 10.3 17.1.0
with no message (
)*
6 2.5 19.10*Yes 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
for namespaces and enumerators (
)* (
)*
4.9 (partial)*
6 3.6 19.0 (2015)*Yes 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
6 3.6 19.0 (2015)*Yes 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0 Allow constant evaluation for all constant template arguments (
)*
6 3.6 19.12*Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
and empty parameter packs
6 3.9 19.12*Yes 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0 Remove deprecated use of the
keyword
7 3.8 19.11*Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0 Remove deprecated operator++(bool)
7 3.8 19.11*Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0 Make exception specifications part of the type system (
)*
7 4 19.12*Yes 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
in preprocessor conditionals
5 Yes 19.11*Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0 DR11: New specification for
(
et al) (
)*
7 3.9 19.14**Yes 6.1 19.1 11.0 11.0 10.3 17.1.0
with base classes (
)*
7 3.9 19.14*Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
(
)*
6 3.6 19.12*Yes 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0 Lambda capture of *this (
)*
7 3.9 19.11*Yes 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0 Direct-list-initialization of enumerations
7 3.9 19.11*Yes 4.14 18.0 19.1 11.0 11.0 10.3 17.1.0
(
)*
7 5 19.11*Yes 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0 Differing begin and end types in
(
)*
6 3.9 19.10*Yes 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0 [[
]]
7 3.9 19.10*Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0 [[
]]
7 3.9 19.11*Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0 [[
]]
7 3.9 19.11*Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0 Hexadecimal
(
)*
3.0 Yes 19.11*Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0 Using attribute namespaces without repetition
7 3.9 19.11*Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
for over-aligned data (
)*
7 4 19.12*10.0.0*4.14 19.0 19.1 11.0 11.0 10.3 17.1.0 Constant template parameters with auto type (
)*
7 4 19.14*Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0 Guaranteed
(
)*
7 4 19.13*Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0 Replacement of class objects containing reference members
7 6 19.14*Yes 5.0 19.1 11.0 11.0 10.3 17.1.0 Stricter
7 4 19.14*Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
(
)*
7 4 19.11*Yes 4.14 19.0 18.1 11.0*11.0 10.3 17.1.0 Ignore unknown
Yes 3.9 19.0 (2015)*Yes 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
statements (
)*
7 3.9 19.11*Yes 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0 Init-statements for
and
7 3.9 19.11*Yes 4.14 18.0 18.1 11.0 11.0 10.3 17.1.0
(
)*
7 3.9 19.12*Yes 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0 Removing
dynamic exception specifications
7 4 19.12*Yes 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0 Pack expansions in using-declarations (
)*
7 4 19.14*Yes 5.0 19.0 19.1 11.0 11.0 10.3 17.1.0 DR98: Matching of template template-arguments excludes compatible templates (
)*
7 4 19.12*Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Class template argument deduction
(
)*
7 5 19.14*Yes 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0 C++17 feature
Paper(s)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ for AIX
C++17 library features
C++17 featurePaper(s)GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Embarcadero C++ Builder*
(
)*
6.1 3.6 19.0 (2015)*Yes 17.1.0 N/A10.3
(
)*
6.1 3.7 19.0 (2015)*Yes 17.1.0 N/A10.3
,
and
(
)*
6 3.6 19.0 (2015)*Yes 17.1.0 N/A10.3 std::allocator_traits::is_always_equal, noexcept cleanups (
)*
6.1 3.7 19.0 (2015)*17.1.0 N/A
(
)*
6.1 3.7 19.0 (2015)*Yes 17.1.0 N/A
,
(
)*
6.1 3.7 19.0 (2015)*Yes 17.1.0 N/A
std::unordered_map::try_emplace
,
std::unordered_map::insert_or_assign
(
)*
6.1 3.7 19.0 (2015)*Yes 17.1.0 N/AImproving
and
6.1 4 19.0 (Update 2)*Yes 17.1.0 N/A10.3
(
)*
6.1 3.7 19.0 (2015)*Yes 17.1.0 N/A10.3
(untimed) (
)*
6 3.7 19.0 (Update 2)*Yes 17.1.0 N/A10.3 Minimal incomplete type support for
,
, and
(
)*
3.0 3.6 18.0*Yes 17.1.0 N/A
variable templates (
)*
7.1 3.8 19.0 (Update 2)*Yes 17.1.0 N/A10.3
(
)*
6.1 3.8 19.0 (Update 2)*Yes 17.1.0 N/A10.3
(
)*
7.1 3.8 19.0 (Update 2)*Yes 17.1.0 N/ARounding functions for
and
(
)*
7.1 3.8 19.0 (Update 2)*Yes 17.1.0 N/ATransparent
(std::owner_less<void>) (
)*
7.1 3.8 19.0 (Update 2)*Yes 17.1.0 N/A
(
)*
7.1 3.9 19.12*Yes 17.1.0 N/A10.3 Parallel algorithms and
(
)* (
)*
9*17
(partial)*19.14*18.0*
(
)*
7 3.9 19.0 (Update 3)*10.0.0*17.1.0 N/A10.3
(
)*
7.1*3.9 19.0 (Update 3)*10.0.0*17.1.0 N/A10.3
(
)*
9.1 16 19.13*15.0.0*17.1.1 N/A10.3
(
)*
7.1 16 19.13*Yes 17.1.0 N/A
(
)*
7.1 16 19.13*Yes 17.1.0 N/A
(
)*
7.1 16 19.13*Yes 17.1.0 N/A
Mathematical special functions
(
)*
7 19.14*17.1.1 N/A10.3 constexpr
(
)*
7.1 Yes 19.0 (Update 3)*17.1.0 N/Aconstexpr for
,
,
and range access (
)*
7.1 4 19.11*Yes 17.1.0 N/Aconstexprstd::atomic<T>::is_always_lock_free (
)*
7.1 3.9 19.11*Yes 17.1.0 N/A
std::enable_shared_from_this::weak_from_this
(
)*
7.1 3.9 19.12*Yes 17.1.0 N/A3-argument overload of
(
)*
7.1 3.9 19.14*Yes 17.1.0 N/A
(
)*
7 5 19.11*Yes 17.1.1 N/A10.3
(
)*
7.1 4 19.10*(partial)*
19.11**10.0.0*17.1.0 N/A10.3
(
)*
7.1 4 19.10*10.0.0*17.1.0 N/A10.3
(
)*
7.1 4 19.10*10.0.0*17.1.0 N/A10.3 Major portion of C11 standard library
9.1 7 19.0 (2015)*
(partial)*10.0.0*17.1.1 N/ASplicing
and
(
)*
7 8 19.12*10.0.0*17.1.1 N/Areturn type of
* functions of some
changed from void to reference
7.1 4.0 19.11*Yes 17.1.0 N/A
(
)*
7.1 4 19.10*10.0.0*17.1.0 N/A10.3
(
)*
7.1 3.9 19.10*Yes 17.1.0 N/A10.3
std::has_unique_object_representations
(
)*
7.1 6 19.11*Yes 17.1.1 N/A10.3
and
(
)*
7 4 19.11*Yes 17.1.0 N/A10.3
: Replacement of class objects containing reference members (
) (
)*
7.1 6 19.14*Yes 17.1.0 N/A
Extending memory management tools
(
)*
7.1 4 (partial)*19.11*17.1.0 N/Ashared_ptr::weak_type (
)*
7.1 3.9 19.10*Yes 17.1.0 N/A
: std::to_chars / std::from_chars (
)*
8*
11 7*
14*
20*19.14**
19.24*10.0.0**17.1.1*N/A10.3*
and
with array support
7 11 19.12*12.0.0*17.1.1 N/A10.3 Constexpr for all the member functions of
and
(
)*
7.1 4 19.11*Yes 17.1.1 N/Astd::shared_ptr<T[]> (
)*
7.1 11 19.12*17.1.1 N/Aconstexpr
(
)*
8.1 4 19.14*Yes 17.1.1 N/A
(std::filesystem) (
)*
8 7 19.14*11.0.0*17.1.1 N/A10.3
(
)*
12.1 15 (partial)*
19 19.11*N/A10.3
(
)*
7 5 19.11*Yes 17.1.1 N/A10.3
(
)*
7 5 19.15*Yes 17.1.1 N/A10.3 std::is_invocable,
(
)*
7.1 Yes 19.11*Yes 17.1.1 N/ADR17:
std::hash<std::filesystem::path>
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
Embarcadero C++ Builder*
NotesAs of 2020-11-20, the latest release of Oracle Developer Studio
. Its
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
.