Espacios de nombres
Variantes

C++17

De cppreference.com
< cpp

Las siguientes características fueron fusionadas en C++17:

  1. De las especificaciones técnicas: la biblioteca de sistema de archivos, la biblioteca de fundamentos v1 (incluyendo optional, any, string_view, asignadores polimórficos, buscadores, apply), paralelismo v1 (incluyendo políticas de ejecución, reduce, inclusive_scan, exclusive_scan), pero se eliminó exception_list. De la especificación técnica de funciones especiales: funciones matemáticas especiales, de la biblioteca de fundamentos v2: std::gcd, std::lcm
  2. De C11: std::aligned_alloc, std::timespec_get

Eliminados y obsoletos/en desuso

Eliminados

auto_ptr, objetos función obsoletos, std::random_shuffle, std::unexpected, los alias de iostreams obsoletos, trígrafos, la palabra clave register, incremento del tipo bool

Obsoletos/en desuso

std::iterator, std::raw_storage_iterator, std::get_temporary_buffer, std::is_literal_type, std::result_of, todo el archivo de encabezado <codecvt>

Nuevas características del lenguaje

Nuevos archivos de encabezado

Nuevas características de la biblioteca

En utility

En memory



En types

En algorithm

Relacionados con contenedores

En numeric

Otras

Informes de defectos

Informes de defectos corregidos en (289 centrales, 281 biblioteca)

Soporte de compiladores

Artículo principal: Soporte de compiladores de C++

Características principales del lenguaje C++17

Característica de C++17
 
Ponencia(s)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
Nvidia nvcc
ID: Nuevas reglas de auto para inicialización de lista directa N3922 6 3.9 19.12* 4.14 19.0 10.3 19.1 11.0
static_assert sin mensaje N3928 6 2.5 19.10* 4.12 18.0 10.3 17.7 11.0
typename en un parámetro de plantilla de plantilla N4051 5 3.5 19.0 (2015)* 4.10.1 17.0 10.3 17.7 Sí*
Eliminar trígrafos N4086 5 3.5 16.0* 5.0 10.3 19.1 11.0
Definición de espacios de nombre anidados N4230 6 3.6 19.0 (Actualización 3)* 4.12 17.0 10.3 17.7 11.0
Atributos para espacios de nombre y enumeradores N4266 4.9 (partial)*
6
3.6 19.0 (2015)* 4.11 17.0 10.3 17.7 11.0
Literales de carácter u8 N4267 6 3.6 19.0 (2015)* 4.11 17.0 10.3 17.7 11.0
Permitir evaluación constante para todos los argumentos de plantilla de no tipo N4268 6 3.6 19.12* 5.0 19.0.1 10.3 19.1 11.0
Expresiones de pliegue N4295 6 3.6 19.12* 4.14 19.0 10.3 18.1 11.0
Expresiones de pliegue unarias y paquetes de parámetros vacíos P0036R0 6 3.9 19.12* 4.14 19.0 10.3 19.1 11.0
Eliminar uso obsoleto de la palabra clave register P0001R1 7 3.8 19.11* 4.13 18.0 10.3 17.7 11.0
Remover operator++(bool) obsoleto P0002R1 7 3.8 19.11* 4.13 18.0 10.3 17.7 11.0
Hacer las especificaciones de excepciones parte del sistema de tipos P0012R1 7 4 19.12* 4.14 19.0 10.3 19.1 11.0
Inicialización de agregados con clases base P0017R1 7 3.9 19.14* 5.0 19.0.1 10.3 19.1 11.0
__has_include en condicionales del preprocesador P0061R1 5 19.11* 4.13 18.0 10.3 17.7 11.0
ID: Nueva especificación para constructores heredados (ID 1941 et al) P0136R1 7 3.9 19.14* 6.1 10.3 19.1 11.0
Captura de lambda de *this P0018R3 7 3.9 19.11* 4.14 19.0 10.3 18.1 11.0
Inicialización de lista directa de enumeraciones P0138R2 7 3.9 19.11* 4.14 18.0 10.3 19.1 11.0
Expresiones lambda constexpr P0170R1 7 5 19.11* 4.14 19.0 10.3 18.1 11.0
Tipos que difieren en begin y end en bucle for basado en rango P0184R0 6 3.9 19.10* 4.12 18.0 10.3 17.7 11.0
Atributo [[fallthrough]] P0188R1 7 3.9 19.10* 4.13 18.0 10.3 17.7 11.0
Atributo [[nodiscard]] P0189R1 7 3.9 19.11* 4.13 18.0 10.3 17.7 11.0
Atributo [[maybe_unused]] P0212R1 7 3.9 19.11* 4.13 18.0 10.3 17.7 11.0
Literales de punto flotante hexadecimales P0245R1 3.0 19.11* 4.13 18.0 10.3 17.7 11.0
Usar atributos de espacios de nombres sin repetición P0028R4 7 3.9 19.11* 4.13 18.0 10.3 17.7 11.0
Asignación de memoria dinámica para datos sobrealineados P0035R4 7 4 19.12*

10.0.0*

4.14 19.0 10.3 19.1 11.0
Deducción de argumentos de plantillas de clase P0091R3 7 5 19.14* 5.0 19.0.1 10.3 19.1 11.0
Parámetros de plantilla de no tipo con el tipo auto P0127R2 7 4 19.14* 5.0 19.0.1 10.3 19.1 11.0
Elisión de copia obligatoria P0135R1 7 4 19.13* 5.0 19.0.1 10.3 19.1 11.0
Reemplazo de objetos de clase que contienen miembros de referencia P0137R1 7 6 19.14* 5.0 10.3 19.1 11.0
Orden de evaluación de expresiones más estricto P0145R3 7 4 19.14* 5.0 19.0.1 10.3 19.1 11.0
Vínculos estructurados P0217R3 7 4 19.11* 4.14 19.0 10.3 18.1 11.0*
Ignorar atributos desconocidos P0283R2 3.9 19.11* 4.13 18.0 10.3 17.7 11.0
Instrucciones constexpr if P0292R2 7 3.9 19.11* 4.14 19.0 10.3 18.1 11.0
if y switch con un inicializador P0305R1 7 3.9 19.11* 4.14 18.0 10.3 18.1 11.0
Variables en línea P0386R2 7 3.9 19.12* 4.14 19.0 10.3 18.1 11.0
Eliminar especificaciones de excepciones dinámicas P0003R5 7 4 19.10* 4.14 19.0 10.3 19.1 11.0
Expansión de paquetes en declaraciones using P0195R2 7 4 19.14* 5.0 19.0 10.3 19.1 11.0
ID: Coincidencia de argumentos de plantilla de plantilla excluye plantillas compatibles P0522R0 7 4 19.12* 5.0 19.0.1 10.3 19.1 11.0
Característica de C++17
 
Ponencia(s)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
Nvidia nvcc

Características de la biblioteca de C++17

Característica de C++17
 
Ponencia(s)
 
GCC libstdc++
Clang libc++
MSVC
Biblioteca Estándar
Apple Clang
Intel Parallel STL
Sun/Oracle C++
Biblioteca Estándar
Embarcadero C++ Builder
Biblioteca Estándar
Cray C++
Biblioteca Estándar
std::void_t N3911 6 3.6 19.0 (2015)* N/A 10.3
std::uncaught_exceptions() N4259 6 3.7 19.0 (2015)* N/A 10.3
std::size(), std::empty() y std::data() N4280 6 3.6 19.0 (2015)* N/A 10.3
Mejorar std::pair y std::tuple N4387 6 4 19.0 (Actualización 2)* N/A 10.3
std::bool_constant N4389 6 3.7 19.0 (2015)* N/A 10.3
std::shared_mutex (sin tiempo) N4508 6 3.7 19.0 (Actualización 2)* N/A 10.3
Rasgos de tipo de plantillas de variable P0006R0 7 3.8 19.0 (Actualización 2)* N/A 10.3
Rasgos de tipo para operadores lógicos P0013R1 6 3.8 19.0 (Actualización 2)* N/A 10.3
Estandarización de la especificación técnica de paralelismo P0024R2 9* 19.14* 18.0*
std::clamp() P0025R0 7 3.9 19.0 (Actualización 3)*

10.0.0*

N/A 10.3
Tamaño de interferencia de hardware P0154R1 12 19.11* N/A 10.3
Rasgos de tipo intercambiables (nothrow) P0185R1 7 3.9 19.0 (Actualización 3)*

10.0.0*

N/A 10.3
Biblioteca de sistema de archivos P0218R1 8 7 19.14*

11.0.0*

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

10.0.0*

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

10.0.0*

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

10.0.0*

N/A 10.3
Recursos de memoria polimórficos P0220R1 9 19.13* N/A 10.3
Funciones matemáticas especiales P0226R1 7 19.14* N/A 10.3
C++17 debe referirse a C11 en lugar de C99 P0063R3 9 7 19.0 (2015)*
(parcial)*

10.0.0*

N/A
Mapas y Conjuntos (maps/sets) unidos P0083R3 7 8 19.12*

10.0.0*

N/A
std::variant P0088R3 7 4 19.10*

10.0.0*

N/A 10.3
std::make_from_tuple() P0209R2 7 3.9 19.10* N/A 10.3
std::has_unique_object_representations P0258R2 7 6 19.11* N/A 10.3
std::gcd() y std::lcm() P0295R0 7 4 19.11* N/A 10.3
std::not_fn P0005R4
P0358R1
7 3.9 19.12* N/A 10.3
Conversiones elementales de cadenas P0067R5 8 (no punto flotante)
11
7 (no punto flotante)
14 (no punto flotante from_chars)
19.14* (no punto flotante)*
19.24*

10.0.0* (no punto flotante)

N/A 10.3 (no punto flotante from_chars)
std::shared_ptr y std::weak_ptr con apoyo para arrays P0414R2 7 11 19.12*

12.0.0*

N/A 10.3
std::scoped_lock P0156R2 7 5 19.11* N/A 10.3
std::byte P0298R3 7 5 19.11* N/A 10.3
std::is_aggregate LWG2911 7 5 19.15* N/A 10.3
Característica de C++17
 
Ponencia(s)
 
GCC libstdc++
Clang libc++
MSVC
Biblioteca Estándar
Apple Clang
Intel Parallel STL
Sun/Oracle C++
Biblioteca Estándar
Embarcadero C++ Builder
Biblioteca Estándar
Cray C++
Biblioteca Estándar

Notas:

  • A partir de 2020-11-20, el último lanzamiento de Oracle Developer Studio es 12.6. Su documentación no menciona C++17.

* - planea sobre el número de versión para ver las notas