Namespaces
Variants

Compiler support for C++17

From cppreference.net

* - pase el cursor sobre una celda marcada con el asterisco * para ver notas emergentes adicionales.
DR nn - el número nn después de "DR" denota la revisión de C++ objetivo a la que se aplica el Informe de Defectos, por ejemplo, DR20 → C++20.

Características principales del lenguaje C++17

Característica de C++17

Documento(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: Nuevas auto reglas para direct-list-initialization N3922 5 3.8 19.0 (2015)* 4.10.1 17.0 17.7 11.0 11.0 10.3 17.1.0
typename en un parámetro de plantilla de plantilla N4051 5 3.5 19.0 (2015)* 4.10.1 17.0 17.7 Sí* 11.0 10.3 17.1.0
Eliminación de trigraphs N4086 5 3.5 16.0* 5.0 19.1 11.0 11.0 10.3 17.1.0
Definición de espacio de nombres anidado N4230 6 3.6 19.0 (Update 3)* 4.12 17.0 17.7 11.0 11.0 10.3 17.1.0
static_assert sin mensaje  ( FTM ) * N3928 6 2.5 19.10* 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
Atributos para espacios de nombres y enumeradores  ( FTM ) * ( FTM ) * N4266 4.9 (parcial)*
6
3.6 19.0 (2015)* 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
u8 literales de carácter N4267 6 3.6 19.0 (2015)* 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
Permitir evaluación constante para todos los argumentos de plantilla constantes  ( FTM ) * N4268 6 3.6 19.12* 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Expresiones de plegado unario y paquetes de parámetros vacíos P0036R0 6 3.9 19.12* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Eliminar el uso obsoleto de la palabra clave register P0001R1 7 3.8 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Eliminar el obsoleto operator ++ ( bool ) P0002R1 7 3.8 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Hacer que las especificaciones de excepción sean parte del sistema de tipos  ( FTM ) * P0012R1 7 4 19.12* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
__has_include en condicionales del preprocesador P0061R1 5 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
DR11: Nueva especificación para constructores heredados ( DR1941 et al)  ( FTM ) * P0136R1 7 3.9 19.14* * 6.1 19.1 11.0 11.0 10.3 17.1.0
Clases agregadas con clases base  ( FTM ) * P0017R1 7 3.9 19.14* 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Expresiones de Plegado ( FTM ) * N4295 6 3.6 19.12* 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Captura en lambda de * this ( FTM ) * P0018R3 7 3.9 19.11* 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Inicialización directa por lista de enumeraciones P0138R2 7 3.9 19.11* 4.14 18.0 19.1 11.0 11.0 10.3 17.1.0
constexpr expresiones lambda ( FTM ) * P0170R1 7 5 19.11* 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Tipos diferentes de begin y end en range-based for ( FTM ) * P0184R0 6 3.9 19.10* 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
[[ fallthrough ]] atributo P0188R1 7 3.9 19.10* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[ nodiscard ]] atributo P0189R1 7 3.9 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[ maybe_unused ]] atributo P0212R1 7 3.9 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Literales hexadecimales de punto flotante ( FTM ) * P0245R1 3.0 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Uso de espacios de nombres de atributos sin repetición P0028R4 7 3.9 19.11* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Asignación de memoria dinámica para datos sobrealineados  ( FTM ) * P0035R4 7 4 19.12* 10.0.0* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Parámetros de plantilla constantes con tipo auto ( FTM ) * P0127R2 7 4 19.14* 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Eliminación garantizada de copia copy elision ( FTM ) * P0135R1 7 4 19.13* 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Reemplazo de objetos de clase que contienen miembros de referencia P0137R1 7 6 19.14* 5.0 19.1 11.0 11.0 10.3 17.1.0
Evaluación de expresiones más estricta expression evaluation order P0145R3 7 4 19.14* 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Enlaces Estructurados ( FTM ) * P0217R3 7 4 19.11* 4.14 19.0 18.1 11.0* 11.0 10.3 17.1.0
Ignorar atributos desconocidos attributes P0283R2 3.9 19.0 (2015)* 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
sentencias constexpr if ( FTM ) * P0292R2 7 3.9 19.11* 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Sentencias de inicialización para if y switch P0305R1 7 3.9 19.11* 4.14 18.0 18.1 11.0 11.0 10.3 17.1.0
Variables en línea ( FTM ) * P0386R2 7 3.9 19.12* 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Eliminación de especificaciones de excepciones dinámicas P0003R5 7 4 19.12* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Expansiones de paquetes en declaraciones using  ( FTM ) * P0195R2 7 4 19.14* 5.0 19.0 19.1 11.0 11.0 10.3 17.1.0
DR98: La coincidencia de argumentos de plantilla de plantilla excluye plantillas compatibles  ( FTM ) * P0522R0 7 4 19.12* 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Deducción de argumentos de plantilla de clase ( FTM ) * P0091R3 7 5 19.14* 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0


Característica de C++17


Documento(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

Características de la biblioteca C++17

**Cambios realizados:** - "and" → "y" - "Feature-testing macro" → "Macro de prueba de características" - "Yes" → "Sí" - Se preservaron todos los términos de C++ (`std::size()`, `std::empty()`, `std::data()`, `__cpp_lib_nonmember_container_access`) - Se mantuvieron intactos todos los tags HTML y atributos - No se tradujo el texto dentro de los elementos de código **Cambios realizados:** - "untimed" → "sin temporización" - "Feature-testing macro" → "Macro de prueba de características" - "Yes" → "Sí" - Se mantuvieron todos los términos técnicos de C++ (`std::shared_mutex`, `__cpp_lib_shared_mutex`, etc.) - Se preservaron todas las etiquetas HTML y atributos - Se conservó el formato original y los valores numéricos **Cambios realizados:** - Traducido "Feature-testing macro" a "Macro de prueba de características" en el atributo `title` - Se mantuvieron todos los términos técnicos de C++ (`std::optional`, `FTM`, `__cpp_lib_optional`) - Se preservaron todas las etiquetas HTML y atributos - No se tradujeron los valores numéricos y códigos de versión - Se mantuvo "N/A" sin traducción
Característica de C++17

Documento(s)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Embarcadero C++ Builder*
std::void_t ( FTM ) * N3911 6.1 3.6 19.0 (2015)* 17.1.0 N/A 10.3
std::uncaught_exceptions() ( FTM ) * N4259 6.1 3.7 19.0 (2015)* 17.1.0 N/A 10.3
std::size() , std::empty() y std::data() ( FTM ) * N4280 6 3.6 19.0 (2015)* 17.1.0 N/A 10.3
std::allocator_traits::is_always_equal , noexcept limpiezas  ( FTM ) * N4258 6.1 3.7 19.0 (2015)* 17.1.0 N/A
std::invoke ( FTM ) * N4169 6.1 3.7 19.0 (2015)* 17.1.0 N/A
std::map::try_emplace , std::map::insert_or_assign ( FTM ) * N4279 6.1 3.7 19.0 (2015)* 17.1.0 N/A
std::unordered_map::try_emplace , std::unordered_map::insert_or_assign ( FTM ) * N4279 6.1 3.7 19.0 (2015)* 17.1.0 N/A
Mejorando std::pair y std::tuple N4387 6.1 4 19.0 (Update 2)* 17.1.0 N/A 10.3
std::bool_constant ( FTM ) * N4389 6.1 3.7 19.0 (2015)* 17.1.0 N/A 10.3
std::shared_mutex (sin temporización)  ( FTM ) * N4508 6 3.7 19.0 (Update 2)* 17.1.0 N/A 10.3
Soporte mínimo para tipos incompletos en std::forward_list , std::list , y std::vector ( FTM ) * N4510 3.0 3.6 18.0* 17.1.0 N/A
Plantillas de variables de rasgos de tipo ( FTM ) * P0006R0 7.1 3.8 19.0 (Update 2)* 17.1.0 N/A 10.3
Rasgos de tipo de operador lógico ( FTM ) * P0013R1 6.1 3.8 19.0 (Update 2)* 17.1.0 N/A 10.3
std::as_const ( FTM ) * P0007R1 7.1 3.8 19.0 (Update 2)* 17.1.0 N/A
Funciones de redondeo para std::chrono::duration y std::chrono::time_point ( FTM ) * P0092R1 7.1 3.8 19.0 (Update 2)* 17.1.0 N/A
Transparente std::owner_less ( std::owner_less<void> )  ( FTM ) * P0074R0 7.1 3.8 19.0 (Update 2)* 17.1.0 N/A
std::not_fn ( FTM ) * P0005R4
P0358R1
7.1 3.9 19.12* 17.1.0 N/A 10.3
Algoritmos paralelos y políticas de ejecución ( FTM ) * ( FTM ) * P0024R2 9* 17
(parcial)*
19.14* 18.0*
std::clamp() ( FTM ) * P0025R1 7 3.9 19.0 (Actualización 3)* 10.0.0* 17.1.0 N/A 10.3
Rasgos (nothrow-)swappable ( FTM ) * P0185R1 7.1* 3.9 19.0 (Update 3)* 10.0.0* 17.1.0 N/A 10.3
Recursos de memoria polimórficos ( FTM ) * P0220R1 9.1 16 19.13* 15.0.0* 17.1.1 N/A 10.3
std::apply ( FTM ) * P0220R1 7.1 16 19.13* 17.1.0 N/A
Buscadores ( FTM ) * P0220R1 7.1 16 19.13* 17.1.0 N/A
std::sample ( FTM ) * P0220R1 7.1 16 19.13* 17.1.0 N/A
Funciones matemáticas especiales ( FTM ) * P0226R1 7 19.14* 17.1.1 N/A 10.3
constexpr std::addressof ( FTM ) * LWG2296 7.1 19.0 (Actualización 3)* 17.1.0 N/A
constexpr para std::reverse_iterator , std::move_iterator , std::array y acceso a rangos ( FTM ) * P0031R0 7.1 4 19.11* 17.1.0 N/A
constexpr std:: atomic < T > :: is_always_lock_free ( FTM ) * P0152R1 7.1 3.9 19.11* 17.1.0 N/A
std::enable_shared_from_this::weak_from_this ( FTM ) * P0033R1 7.1 3.9 19.12* 17.1.0 N/A
Sobrecarga de 3 argumentos de std::hypot ( FTM ) * P0030R1 7.1 3.9 19.14* 17.1.0 N/A
std::byte ( FTM ) * P0298R3 7 5 19.11* 17.1.1 N/A 10.3
std::string_view ( FTM ) * N3921
P0220R1
P0254R2
P0403R1
7.1 4 19.10* (parcial)*
19.11* *
10.0.0* 17.1.0 N/A 10.3
std::any ( FTM ) * P0220R1
P0032R3
7.1 4 19.10* 10.0.0* 17.1.0 N/A 10.3
std::optional ( FTM ) * P0220R1 7.1 4 19.10* 10.0.0* 17.1.0 N/A 10.3
Porción principal de la biblioteca estándar C11 P0063R3 9.1 7 19.0 (2015)*
(parcial)*
10.0.0* 17.1.1 N/A
Empalme de Maps y Sets ( FTM ) * P0083R3 7 8 19.12* 10.0.0* 17.1.1 N/A
tipo de retorno de las funciones emplace * de algunos contenedores cambió de void a referencia P0084R2 7.1 4.0 19.11* 17.1.0 N/A
std::variant ( FTM ) * P0088R3 7.1 4 19.10* 10.0.0* 17.1.0 N/A 10.3
std::make_from_tuple() ( FTM ) * P0209R2 7.1 3.9 19.10* 17.1.0 N/A 10.3
std::has_unique_object_representations ( FTM ) * P0258R2 7.1 6 19.11* 17.1.1 N/A 10.3
std::gcd() y std::lcm() ( FTM ) * P0295R0 7 4 19.11* 17.1.0 N/A 10.3
CWG issue 1776 : Reemplazo de objetos de clase que contienen miembros de referencia ( std::launder )  ( FTM ) * P0137R1 7.1 6 19.14* 17.1.0 N/A
Extensión de herramientas de gestión de memoria ( FTM ) * P0040R3 7.1 4 19.11* 17.1.0 N/A
shared_ptr::weak_type ( FTM ) * P0163R0 7.1 3.9 19.10* 17.1.0 N/A
Conversiones elementales de cadenas : std:: to_chars / std:: from_chars ( FTM ) * P0067R5 8*
11
7*
14*
20*
19.14* *
19.24*
10.0.0* * 17.1.1* N/A 10.3*
std::shared_ptr y std::weak_ptr con soporte para arrays P0414R2 7 11 19.12* 12.0.0* 17.1.1 N/A 10.3
Constexpr para todas las funciones miembro de std::chrono::duration y std::chrono::time_point ( FTM ) * P0505R0 7.1 4 19.11* 17.1.1 N/A
std:: shared_ptr < T [ ] > ( MFP ) * P0497R0 7.1 11 19.12* 17.1.1 N/A
constexpr std::char_traits ( FTM ) * P0426R1 8.1 4 19.14* 17.1.1 N/A
Biblioteca del sistema de archivos ( std::filesystem )  ( FTM ) * P0218R1
P0219R1
8 7 19.14* 11.0.0* 17.1.1 N/A 10.3
Tamaño de interferencia de hardware ( FTM ) * P0154R1 12.1 15 (parcial)*
19
19.11* N/A 10.3
std::scoped_lock ( FTM ) * P0156R2 7 5 19.11* 17.1.1 N/A 10.3
std::is_aggregate ( FTM ) * LWG2911 7 5 19.15* 17.1.1 N/A 10.3
std::is_invocable , std::invoke_result ( FTM ) * P0604R0 7.1 19.11* 17.1.1 N/A
DR17: std::hash<std::filesystem::path> LWG3657 11.4 17 19.32* N/A


Característica de C++17


Documento(s)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Embarcadero C++ Builder*
Notas
  • A partir del 20 de noviembre de 2020, la última versión de Oracle Developer Studio es la 12.6 . Su documentación no menciona C++17.
  • El compilador Cray puede tener soporte para algunas características anterior a la versión 11.0. Esa versión es cuando se convirtió en un derivado de Clang, adquiriendo todo el soporte de características del lenguaje del compilador base. Consulte el documento Cray/HPE S-2179 .