Espacios de nombres
Variantes
Acciones

C++20

De cppreference.com
< cpp

Las siguientes características están a punto de ser fusionadas en C++20:

  1. De las especificaciones técnicas: Corrutinas, Módulos, Restricciones y conceptos, plantillas de función abreviadas.
  2. De las especificaciones técnicas: Rangos, borrado uniforme de contenedores (std::erase/std::erase_if).

Contenido

[editar] Nuevas características del lenguaje

[editar] Nuevas características de la biblioteca

[editar] Nuevos archivos de encabezado

En la biblioteca de soporte de hilos:

[editar] Características de la biblioteca

[editar] Informes de defectos

[editar] Soporte de compiladores

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

[editar] Características centrales del lenguaje C++20

Característica de c++20
 
Ponencia(s)
 
Versión
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
Nvidia nvcc
Permitir captura de lambda [=, this] P0409R2 c++20-lang 8 6 19.22* 5.1
__VA_OPT__ P0306R4
P1042R1
c++20-lang 8(parcial)*
10 (parcial)*
9 19.25* 5.1
Inicializadores designados P0329R4 c++20-lang 4.7 (parcial)*
8
3.0 (parcial)*
10
19.21* 5.1
Lista de parámetros de plantilla para lambdas genéricas P0428R2 c++20-lang 8 9 19.22* 5.1
Inicializadores de miembros por defecto para campos de bits P0683R1 c++20-lang 8 6 19.25* 5.1
Constructores con inicialización de lista en la deducción de argumentos de plantillas de clase P0702R1 c++20-lang 8 6 19.14* 5.0
Punteros a miembros calificados const& P0704R1 c++20-lang 8 6 19.0* 5.1
Conceptos P0734R0 c++20-lang 6
(sólo TS)
10
10 19.23* (parcial)*
Lambdas en contextos no evaluados P0315R4 c++20-lang 9
Operación de comparación de tres vías P0515R3 c++20-lang 10 8 (parcial)
10
19.20* 5.1
DR: Simplificar captura de lambda implícita P0588R1 c++20-lang 8 19.24* 5.1
Instrucciones de inicialización para bucle for basado en rango P0614R1 c++20-lang 9 8 19.25* 6.0
Lambdas sin estado construibles y asignables por defecto P0624R2 c++20-lang 9 8 19.22* 5.1
Coincidencia errónea const con constructor de copia por defecto P0641R2 c++20-lang 9 8 19.21* (parcial) 5.1
Comprobación de acceso en especializaciones P0692R1 c++20-lang 8 (parcial) 5.1
Búsqueda dependiente de argumentos (ADL) y plantillas de función que no están visibles P0846R0 c++20-lang 9 9 19.21* 5.1
Creación menos entusiasta de funciones constexpr P0859R0 c++20-lang 5.2 (parcial)*
9
Atributos [[likely]] y [[unlikely]] P0479R5 c++20-lang 9 5.1
Hacer typename más opcional P0634R3 c++20-lang 9 5.1
Expansión de paquetes en captura de inicialización (init-capture) de lambda P0780R2 c++20-lang 9 9 19.22*
Atributo [[no_unique_address]] P0840R2 c++20-lang 9 9 5.1
DR: Relajar las reglas para encontrar un punto de personalización para vínculos estructurados P0961R1 c++20-lang 8 8 19.21* 5.1
DR: Relajar las reglas para encontrar un punto de personalización para bucle for basado en rango P0962R1 c++20-lang 8 5.1
DR: Permitir vínculos estructurados para miembros accesibles P0969R0 c++20-lang 8 8 19.21* 5.1
Destruir el operador delete P0722R3 c++20-lang 9 6 6.1
Tipos de clase en parámetros de plantilla de no tipo P0732R2 c++20-lang 9
Poner en desuso la captúra implícita de this mediante [=] P0806R2 c++20-lang 9 19.22* 5.1
explicit(bool) P0892R2 c++20-lang 9 9 19.24* 5.1
Integrar macros de prueba de característica P0941R2 c++20-lang 5 3.4 19.15* (parcial)
19.20*
5.0
Prohibir agregados con constructores declarados por el usuario P1008R1 c++20-lang 9 8 19.20* 5.1
Función virtual constexpr P1064R0 c++20-lang 9 9 5.1
Mejoras de consistencia para comparaciones P1120R0 c++20-lang 10 8 (parcial)
10
19.22* 5.1
char8_t P0482R6 c++20-lang 9 7 19.22* 5.1
std::is_constant_evaluated() P0595R2 c++20-lang 9 9 19.25* 5.1 19.1
Bloques try-catch constexpr P1002R1 c++20-lang 9 8 19.25* 5.1
Funciones inmediatas P1073R3 c++20-lang 10 (parcial)* 5.1
Espacio de nombres en línea anidados P1094R2 c++20-lang 9 8 5.1
Aún otro enfoque para declaraciones constreñidas declarations P1141R2 c++20-lang 10
Enteros con signo son complemento a dos P1236R1 c++20-lang 9 9
dynamic_cast constexpr y typeid polifórmico P1327R1 c++20-lang 10 9 5.1
Cambiar el miembro activo de una unión dentro de constexpr P1330R0 c++20-lang 9 9 19.10* 5.1
Corutinas P0912R5 c++20-lang 10 8 (parcial) 19.25*(parcial) 5.1
Inicialización de agregados usando paréntesis P0960R3 c++20-lang 10 5.1
DR: Deducción de tamaños de arrays en expresiones-new P1009R2 c++20-lang 9 5.1
Módulos P1103R3 c++20-lang 8 (parcial) 19.25*(parcial)
Requerimientos de Unicode más firmes P1041R4
P1139R2
c++20-lang 10 19.0* (P1041R4) N/A
<=> != == P1185R2 c++20-lang 10 10 19.22* 5.1
DR: Funciones explícitamente marcadas como default con diferentes especificaciones de excepciones P1286R2 c++20-lang 10 9 5.1
Captura de lambdas y especificadores de clase de almacenamiento de vínculos estructurados P1091R3
P1381R1
c++20-lang 10 8 (parcial) 5.1
Permitir conversiones a arrays de límite desconocido P0388R4 c++20-lang 10 6.0
Operaciones de contenedores constexpr P0784R7 c++20-lang 10 10 6.0
Poner en deuso algunos usos de volatile P1152R4 c++20-lang 10 10 6.0
constinit P1143R2 c++20-lang 10 10
Poner en desuso el operador coma en índices P1161R3 c++20-lang 10 9 19.25* 6.0
Atributo [[nodiscard]] con mensaje P1301R4 c++20-lang 10 9 19.25* 6.0
Inicialización trivial por defecto en funciones constexpr P1331R2 c++20-lang 10 10 6.0
Declaración asm no evaluada en funciones constexpr P1668R1 c++20-lang 10 10 6.1
using enum P1099R5 c++20-lang 19.24*
Sintetizar comparación de tres vías para una categoría de comparación especificada P1186R3 c++20-lang 10 10 19.24* 6.0
DR: Atributo [[nodiscard]] para constructores P1771R1 c++20-lang 10 9 19.24* 6.0
Deducción de argumentos de plantillas de clase para alias de plantilla P1814R0 c++20-lang 10
Deducción de argumentos de plantillas de clase para agregados P1816R0 c++20-lang 10
DR: Movimiento implícito para objetos más locales y referencias rvalue P1825R0 c++20-lang 19.24* 6.0
Permitir hacer comparaciones por defecto por valor P1946R0 c++20-lang 10 19.25* 6.1
Eliminar std::weak_equality y std::strong_equality P1950R0 c++20-lang 10
Inconsistencias con parámetros de plantilla de no tipo P1907R1 c++20-lang 9
DR: Convertir de T* a bool debe considerarse de estrechamiento P1957R2 c++20-lang 10*


Característica de c++20
 
Ponencia(s)
 
GCC
Clang
MSVC
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Portland Group (PGI)
Nvidia nvcc

[editar] Características de la biblioteca de C++20

Característica de c++20
 
Ponencia(s)
 
GCC libstdc++
Clang libc++
MSVC
Biblioteca Estándar
Apple Clang
Sun/Oracle C++
Biblioteca Estándar
Embarcadero C++ Builder
Biblioteca Estándar
Cray C++
Biblioteca Estándar
std::endian P0463R1 8 7 19.22*


Extender std::make_shared() para soportar arrays P0674R1
Tipo atómico de punto flotante P0020R6 10 19.22*


Flujo de salida sincronizado con búfer P0053R7


constexpr para <algorithm> y <utility> P0202R3 10 8 (parcial) 19.26*


Más constexpr para <complex> P0415R1 9 7 (parcial)


Hacer std::memory_order una enumeración con ámbito P0439R0 9 9 19.25*


Comprobación de prefijo y sufijo de cadenas P0457R2 9 6 19.21*


Soporte de la biblioteca para operator<=> <compare> P0768R1 10 7 (parcial) 19.20* (parcial)


std::remove_cvref P0550R2 9 6 19.20*


Atributo [[nodiscard]] en la biblioteca estándar P0600R1 9 7 (parcial) 19.13* (parcial)
19.22*


Usar std::move en algoritmos numéricos P0616R0 9 19.23*


Utilidad para convertir un puntero a un puntero sin formato P0653R2 8 6 19.22*


std::shared_ptr y std::weak_ptr atómicos P0718R2
std::span P0122R7 10 7 19.26*


Calendario y huso horario P0355R7 7 (parcial)


<version> P0754R2 9 7 19.22*


Comparar contenedores no ordenados P0809R0 16.0*


Requerimientos de ConstexprIterator P0858R0 9 19.11*


std::basic_string::reserve() no debe encogerse P0966R1 8 19.25*
std::atomic_ref P0019R8 10


Función miembro contains() de contenedores asociativos P0458R2 9 19.21*


DR: Construcción pieza a pieza de la elisión de copia obligatoria P0475R1 9


std::bit_cast() P0476R2 19.27*


Operaciones enteras de la potencia al cuadrado P0556R3 P1956R1 9 (P0556R3)
10 (P1956R1)
19.25* (P0556R3)
19.27* (P1956R1)


Mejorar el valor de retorno de algoritmos similares a erase P0646R1 9 10 19.21*


std::destroying_delete P0722R3 9 9


std::is_nothrow_convertible P0758R1 9 9 19.23*


Añadir shift a <algorithm> P0769R2 10 19.21*


Constexpr para std::swap() y funciones relacionadas con swap P0879R0 10 19.26*


std::type_identity P0887R1 9 8 19.21*


Biblioteca de conceptos P0898R3 10 19.23*


Operadores de comparación constexpr para std::array P1023R0 10 8 19.27*
std::unwrap_ref_decay y std::unwrap_reference P0318R1 9 8 19.21*


std::bind_front() P0356R5 9 19.25*


std::reference_wrapper para tipos incompletos P0357R3 9 8 19.26*


Fixing operator>>(basic_istream&, CharT*) P0487R1 8 19.23*


Soporte de la biblioteca para char8_t P0482R6 9 19.22*


Funciones de utilidad para implementar uses-allocator construcción P0591R4 9


DR: std::variant y std::optional deberían progapar la trivialidad de copia/movimimiento P0602R4 8.3 8 19.11*


Un constructor de conversión de std::variant sano P0608R3 10 9


El constructor de movmiento de std::function debería ser noexcept P0771R1 7.2 6 19.22*


La Propuesta de una Sola Biblioteca de Rangos P0896R4 10


Búsqueda heterogénea para contenedores no ordenados P0919R3 P1690R1 19.23* (P0919R3)
19.25* (P1690R1)


<chrono> zero(), min(), y max() deberían ser noexcept P0972R0 9 8 19.14*


constexpr en std::pointer_traits P1006R1 9 8 19.26*


std::assume_aligned() P1007R3 9


Eliminar operadores de comparación de std::span P1085R2 10 8


Hacer la propagación de asignadores con estado más consistente para operator+(basic_string) P1165R1 10 19.26*


Borrado de contenedores consistente P1209R0 P1115R3 9 (P1209R0)
10 (P1115R3)
8 (P1209R0) 19.25* (P1209R0)
19.27* (P1115R3)
std::lerp() y std::midpoint() P0811R3 9 9


Mejoras de usabilidad para std::span P1024R3 10 9


DR: Hacer create_directory() intuitiva P1164R1 8.3 19.20*


std::ssize() y medida sin signo para std::span P1227R2 10 9 19.25*


Rasgos de tipo para arrays (is_unbounded_array)is_bounded_array P1357R1 9 9 19.25*
std::to_array() P0325R4 10 10 19.25*


Acceso eficiente al búfer de std::basic_stringbuf P0408R7


Compatibilidad de distribución y rasgos de tipo de interconvertibilidad de punteros P0466R5


Operaciones de bits P0553R4 9 9 19.25*


Constantes matemáticas P0631R8 10 19.25*


Formato de texto P0645R10


std::stop_token y std::jthread P0660R10 10


std::allocator constexpr y utilidades relacionadas P0784R7 10


std::string constexpr P0980R1


std::vector constexpr P1004R2


Adaptadores de rango de entrada P1035R7 10


std::invoke() constexpr y utilidades relacionadas P1065R2 10


Espera y notificación atómica, std::counting_semaphore, std::latch y std::barrier P1135R6


std::source_location P1208R6 7 (sólo TS)


Añadir <=> a la biblioteca estándar P1614R2 10 (parcial)
constructor constexpr por defecto de std::atomic y std::atomic_flag P0883R2 19.26*
constexpr para algoritmos numéricos P1645R1 10 19.26*
Comparaciones enteras seguras P0586R2 10
Característica de c++20
 
Ponencia(s)
 
GCC libstdc++
Clang libc++
MSVC
Biblioteca Estándar
Apple Clang
Sun/Oracle C++
Biblioteca Estándar
Embarcadero C++ Builder
Biblioteca Estándar
Cray C++
Biblioteca Estándar

[editar] Acrónimos

  • TS - Especificación técnica (del inglés Technical Specification).
  • DR - Informe de defecto (del inglés Defect Report).

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