Apoyo de compiladores para C++17
De cppreference.com
< cpp | compiler support
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
|
[https://wg21.link/N3922 [HTTPS://WG21.LINK/N3922 [1] N3922]] |
6 | 3.9 | 19.12* | Sí | 4.14 | 19.0 | 19.1 | 11.0 | |||||
| static_assert sin mensaje | [https://wg21.link/N3928 [HTTPS://WG21.LINK/N3928 [2] N3928]] |
6 | 2.5 | 19.10* | Sí | 4.12 | 18.0 | 17.7 | 11.0 | |||||
typename en un parámetro de plantilla de plantilla
|
[https://wg21.link/N4051 [HTTPS://WG21.LINK/N4051 [3] N4051]] |
5 | 3.5 | 19.0 (2015)* | Sí | 4.10.1 | 17.0 | 17.7 | Sí* | |||||
| Eliminar trígrafos | [https://wg21.link/N4086 [HTTPS://WG21.LINK/N4086 [4] N4086]] |
5 | 3.5 | 16.0* | Sí | 5.0 | 19.1 | 11.0 | ||||||
| Definición de espacios de nombre anidados | [https://wg21.link/N4230 [HTTPS://WG21.LINK/N4230 [5] N4230]] |
6 | 3.6 | 19.0 (Update 3)* | Sí | 4.12 | 17.0 | 17.7 | 11.0 | |||||
| Atributos para espacios de nombre y enumeradores | [https://wg21.link/N4266 [HTTPS://WG21.LINK/N4266 [6] N4266]] |
4.9 (partial)* 6 |
3.6 | 19.0 (2015)* | Sí | 4.11 | 17.0 | 17.7 | 11.0 | |||||
Literales de carácter u8
|
[https://wg21.link/N4267 [HTTPS://WG21.LINK/N4267 [7] N4267]] |
6 | 3.6 | 19.0 (2015)* | Sí | 4.11 | 17.0 | 17.7 | 11.0 | |||||
| Permitir evaluación constante para todos los argumentos de plantilla de no tipo | [https://wg21.link/N4268 [HTTPS://WG21.LINK/N4268 [8] N4268]] |
6 | 3.6 | 19.12* | Sí | 5.0 | 19.0.1 | 19.1 | 11.0 | |||||
| Expresiones de pliegue | [https://wg21.link/N4295 [HTTPS://WG21.LINK/N4295 [9] N4295]] |
6 | 3.6 | 19.12* | Sí | 4.14 | 19.0 | 18.1 | 11.0 | |||||
| Expresiones de pliegue unarias y paquetes de parámetros vacíos | [https://wg21.link/P0036R0 [HTTPS://WG21.LINK/P0036R0 [10] P0036R0]] |
6 | 3.9 | 19.12* | Sí | 4.14 | 19.0 | 19.1 | 11.0 | |||||
| Eliminar uso obsoleto de la palabra clave register | [https://wg21.link/P0001R1 [HTTPS://WG21.LINK/P0001R1 [11] P0001R1]] |
7 | 3.8 | 19.11* | Sí | 4.13 | 18.0 | 17.7 | 11.0 | |||||
Remover operator++(bool) obsoleto
|
[https://wg21.link/P0002R1 [HTTPS://WG21.LINK/P0002R1 [12] P0002R1]] |
7 | 3.8 | 19.11* | Sí | 4.13 | 18.0 | 17.7 | 11.0 | |||||
| Hacer las especificaciones de excepciones parte del sistema de tipos | [https://wg21.link/P0012R1 [HTTPS://WG21.LINK/P0012R1 [13] P0012R1]] |
7 | 4 | 19.12* | Sí | 4.14 | 19.0 | 19.1 | 11.0 | |||||
| Inicialización de agregados con clases base | [https://wg21.link/P0017R1 [HTTPS://WG21.LINK/P0017R1 [14] P0017R1]] |
7 | 3.9 | 19.14* | Sí | 5.0 | 19.0.1 | 19.1 | 11.0 | |||||
| __has_include en condicionales del preprocesador | [https://wg21.link/P0061R1 [HTTPS://WG21.LINK/P0061R1 [15] P0061R1]] |
5 | Sí | 19.11* | Sí | 4.13 | 18.0 | 17.7 | 11.0 | |||||
| ID: Nueva especificación para constructores heredados (ID 1941 et al) | [https://wg21.link/P0136R1 [HTTPS://WG21.LINK/P0136R1 [16] P0136R1]] |
7 | 3.9 | 19.14* | Sí | 6.1 | 19.1 | 11.0 | ||||||
Captura de lambda de *this
|
[https://wg21.link/P0018R3 [HTTPS://WG21.LINK/P0018R3 [17] P0018R3]] |
7 | 3.9 | 19.11* | Sí | 4.14 | 19.0 | 18.1 | 11.0 | |||||
| Inicialización de lista directa de enumeraciones | [https://wg21.link/P0138R2 [HTTPS://WG21.LINK/P0138R2 [18] P0138R2]] |
7 | 3.9 | 19.11* | Sí | 4.14 | 18.0 | 19.1 | 11.0 | |||||
| Expresiones lambda constexpr | [https://wg21.link/P0170R1 [HTTPS://WG21.LINK/P0170R1 [19] P0170R1]] |
7 | 5 | 19.11* | Sí | 4.14 | 19.0 | 18.1 | 11.0 | |||||
Tipos que difieren en begin y end en bucle for basado en rango
|
[https://wg21.link/P0184R0 [HTTPS://WG21.LINK/P0184R0 [20] P0184R0]] |
6 | 3.9 | 19.10* | Sí | 4.12 | 18.0 | 17.7 | 11.0 | |||||
Atributo [[fallthrough]]
|
[https://wg21.link/P0188R1 [HTTPS://WG21.LINK/P0188R1 [21] P0188R1]] |
7 | 3.9 | 19.10* | Sí | 4.13 | 18.0 | 17.7 | 11.0 | |||||
Atributo [[nodiscard]]
|
[https://wg21.link/P0189R1 [HTTPS://WG21.LINK/P0189R1 [22] P0189R1]] |
7 | 3.9 | 19.11* | Sí | 4.13 | 18.0 | 17.7 | 11.0 | |||||
Atributo [[maybe_unused]]
|
[https://wg21.link/P0212R1 [HTTPS://WG21.LINK/P0212R1 [23] P0212R1]] |
7 | 3.9 | 19.11* | Sí | 4.13 | 18.0 | 17.7 | 11.0 | |||||
| Literales de punto flotante hexadecimales | [https://wg21.link/P0245R1 [HTTPS://WG21.LINK/P0245R1 [24] P0245R1]] |
3.0 | Sí | 19.11* | Sí | 4.13 | 18.0 | 17.7 | 11.0 | |||||
| Usar atributos de espacios de nombres sin repetición | [https://wg21.link/P0028R4 [HTTPS://WG21.LINK/P0028R4 [25] P0028R4]] |
7 | 3.9 | 19.11* | Sí | 4.13 | 18.0 | 17.7 | 11.0 | |||||
| Asignación de memoria dinámica para datos sobrealineados | [https://wg21.link/P0035R4 [HTTPS://WG21.LINK/P0035R4 [26] P0035R4]] |
7 | 4 | 19.12* |
10.0.0* |
4.14 | 19.0 | 19.1 | 11.0 | |||||
| Deducción de argumentos de plantillas de clase | [https://wg21.link/P0091R3 [HTTPS://WG21.LINK/P0091R3 [27] P0091R3]] |
7 | 5 | 19.14* | Sí | 5.0 | 19.0.1 | 19.1 | 11.0 | |||||
Parámetros de plantilla de no tipo con el tipo auto
|
[https://wg21.link/P0127R2 [HTTPS://WG21.LINK/P0127R2 [28] P0127R2]] |
7 | 4 | 19.14* | Sí | 5.0 | 19.0.1 | 19.1 | 11.0 | |||||
| Elisión de copia obligatoria | [https://wg21.link/P0135R1 [HTTPS://WG21.LINK/P0135R1 [29] P0135R1]] |
7 | 4 | 19.13* | Sí | 5.0 | 19.0.1 | 19.1 | 11.0 | |||||
| Reemplazo de objetos de clase que contienen miembros de referencia | [https://wg21.link/P0137R1 [HTTPS://WG21.LINK/P0137R1 [30] P0137R1]] |
7 | 6 | 19.14* | Sí | 5.0 | 19.1 | 11.0 | ||||||
| Orden de evaluación de expresiones más estricto | [https://wg21.link/P0145R3 [HTTPS://WG21.LINK/P0145R3 [31] P0145R3]] |
7 | 4 | 19.14* | Sí | 5.0 | 19.0.1 | 19.1 | 11.0 | |||||
| Vínculos estructurados | [https://wg21.link/P0217R3 [HTTPS://WG21.LINK/P0217R3 [32] P0217R3]] |
7 | 4 | 19.11* | Sí | 4.14 | 19.0 | 18.1 | 11.0* | |||||
| Ignorar atributos desconocidos | [https://wg21.link/P0283R2 [HTTPS://WG21.LINK/P0283R2 [33] P0283R2]] |
Sí | 3.9 | 19.11* | Sí | 4.13 | 18.0 | 17.7 | 11.0 | |||||
| Instrucciones constexpr if | [https://wg21.link/P0292R2 [HTTPS://WG21.LINK/P0292R2 [34] P0292R2]] |
7 | 3.9 | 19.11* | Sí | 4.14 | 19.0 | 18.1 | 11.0 | |||||
| if y switch con un inicializador | [https://wg21.link/P0305R1 [HTTPS://WG21.LINK/P0305R1 [35] P0305R1]] |
7 | 3.9 | 19.11* | Sí | 4.14 | 18.0 | 18.1 | 11.0 | |||||
| Variables en línea | [https://wg21.link/P0386R2 [HTTPS://WG21.LINK/P0386R2 [36] P0386R2]] |
7 | 3.9 | 19.12* | Sí | 4.14 | 19.0 | 18.1 | 11.0 | |||||
| Eliminar especificaciones de excepciones dinámicas | [https://wg21.link/P0003R5 [HTTPS://WG21.LINK/P0003R5 [37] P0003R5]] |
7 | 4 | 19.10* | Sí | 4.14 | 19.0 | 19.1 | 11.0 | |||||
| Expansión de paquetes en declaraciones using | [https://wg21.link/P0195R2 [HTTPS://WG21.LINK/P0195R2 [38] P0195R2]] |
7 | 4 | 19.14* | Sí | 5.0 | 19.0 | 19.1 | 11.0 | |||||
| ID: Coincidencia de argumentos de plantilla de plantilla excluye plantillas compatibles | [https://wg21.link/P0522R0 [HTTPS://WG21.LINK/P0522R0 [39] P0522R0]] |
7 | 4 | 19.12* | Sí | 5.0 | 19.0.1 | 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)* | Sí | N/A | 10.3 | |||
| std::uncaught_exceptions() | N4259 | 6 | 3.7 | 19.0 (2015)* | Sí | N/A | 10.3 | |||
| std::size(), std::empty() y std::data() | N4280 | 6 | 3.6 | 19.0 (2015)* | Sí | N/A | 10.3 | |||
| Mejorar std::pair y std::tuple | N4387 | 6 | 4 | 19.0 (Update 2)* | Sí | N/A | 10.3 | |||
| std::bool_constant | N4389 | 6 | 3.7 | 19.0 (2015)* | Sí | N/A | 10.3 | |||
| std::shared_mutex (sin tiempo) | N4508 | 6 | 3.7 | 19.0 (Update 2)* | Sí | N/A | 10.3 | |||
| Rasgos de tipo de plantillas de variable | P0006R0 | 7 | 3.8 | 19.0 (Update 2)* | Sí | N/A | 10.3 | |||
| Rasgos de tipo para operadores lógicos | P0013R1 | 6 | 3.8 | 19.0 (Update 2)* | Sí | 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 (Update 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 (Update 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* | Sí | N/A | 10.3 | |||
| std::has_unique_object_representations | P0258R2 | 7 | 6 | 19.11* | Sí | N/A | 10.3 | |||
| std::gcd() y std::lcm() | P0295R0 | 7 | 4 | 19.11* | Sí | N/A | 10.3 | |||
| std::not_fn | P0005R4 P0358R1 |
7 | 3.9 | 19.12* | Sí | 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* | Sí | N/A | 10.3 | |||
| std::byte | P0298R3 | 7 | 5 | 19.11* | Sí | N/A | 10.3 | |||
| std::is_aggregate | LWG2911 | 7 | 5 | 19.15* | Sí | 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.