C++26
De es.cppreference.net
< cpp
La próxima generación del estándar C++.
El cronograma IS actual para C++26: P1000R6 (2024-05-14).
| Esta sección está incompleta |
Nuevas características del lenguaje
Nuevas características de la biblioteca
Nuevos módulos
Nuevos encabezados
- <contracts>
- <debugging>
- <hazard_pointer>
- <hive>
- <inplace_vector>
- <linalg>
- <meta>
- <rcu>
- <simd>
- <text_encoding>
Encabezados de compatibilidad con C:
Características obsoletas
Características eliminadas
| Esta sección está incompleta |
Características obsoletas (deprecated)
| Esta sección está incompleta |
Reportes de defectos
Soporte de compiladores
Artículo principal: Soporte de compiladores C++26
Características del núcleo del lenguaje C++26
| Característica C++26 |
Documento(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
Cray |
|
|---|---|---|---|---|---|---|---|---|---|---|---|
| DR98: Eliminación de comportamiento indefinido en el análisis léxico | P2621R3 | Sí | 3.3 | 16.0.0* | |||||||
| DR98: Hacer que los literales de cadena no codificables estén mal formados | P1854R4 | 14 | 14 | 16.0.0* | |||||||
| Cadenas no evaluadas | P2361R6 | 14 | 17 (parcial)* 18 |
16.0.0* | |||||||
Agregar @, $ y ` al conjunto de caracteres básico
|
P2558R2 | 15 | Sí | 16.0.0* | |||||||
Conversión constexpr desde void* (FTM)*
|
P2738R1 | 14 | 17 | ||||||||
| DR20: Sobre la ignorabilidad de los atributos estándar | P2552R3 | 15 | Sí | ||||||||
| DR11: Almacenamiento estático para inicializadores con llaves | P2752R3 | 14 | |||||||||
| Mensajes static_assert generados por el usuario (FTM)* | P2741R3 | 14 | 17 | ||||||||
| Variables de marcador de posición sin nombre (FTM)* | P2169R4 | 14 | 18 | ||||||||
| Indexación de paquetes (FTM)* | P2662R3 | 15 | 19 | ||||||||
| Eliminación de la conversión aritmética obsoleta en enumeraciones | P2864R2 | 14 | 18 | ||||||||
| DR11/20: Inicialización de parámetros de plantilla | P2308R1 | 9 | 18 | ||||||||
| Prohibir vincular una referencia devuelta a un temporal | P2748R5 | 14 | 19 | ||||||||
| Atributos para enlaces estructurados (FTM)* | P0609R3 | 15 | 19 | ||||||||
Comportamiento erróneo para lecturas no inicializadas, atributo [[indeterminate]]
|
P2795R5 P3684R1 |
16 | |||||||||
= delete("reason"); (FTM)*
|
P2573R2 | 15 | 19 | ||||||||
| Amigos variádicos (FTM)* | P2893R3 | 15 | 20 | ||||||||
| DR98: Aclarar las reglas para la elisión de llaves en la inicialización de agregados | P3106R1 | Sí | 17 | ||||||||
| DR20: Prohibir que las declaraciones de módulos sean macros | P3034R1 | 15 | |||||||||
| DR11: Los bucles infinitos triviales no son comportamiento indefinido | P2809R3 | 14 | 19 | ||||||||
| Constexpr placement new (FTM)* | P2747R2 | 15 | 20 | ||||||||
| Declaración de enlace estructurado como condición (FTM)* | P0963R3 | 15 | 6 (parcial)* 21 |
||||||||
| Ordenamiento de las restricciones que involucran expresiones fold (FTM)* | P2963R3 | 19 | |||||||||
| Eliminar un puntero a un tipo incompleto debe estar mal formado | P3144R2 | 15 | 19 | 6.7 | |||||||
| Los enlaces estructurados pueden introducir un paquete (FTM)* | P1061R10 | 16 | 21 | ||||||||
| Constexpr enlaces estructurados y referencias a variables constexpr | P2686R5 | 16* | 22 (parcial)* | 6.7 | |||||||
| Constexpr excepciones (FTM)* | P3068R6 | 16 | |||||||||
| Coma variádica de Oxford | P3176R1 | 15 | 20 | ||||||||
| Eliminación de comparaciones obsoletas de arrays | P2865R6 | 15 | 20 | ||||||||
#embed (FTM)*
|
P1967R14 | 15 | 19* | ||||||||
| Parámetros de plantilla de concepto y plantilla de variable (FTM)* | P2841R7 | 22 (parcial)* | |||||||||
| Uniones triviales (FTM)* | P3074R7 P3726R2 |
||||||||||
| Puntos de control observables | P1494R5 | 16 | |||||||||
| Contratos (FTM)* | P2900R14 | 16 | |||||||||
| Reflexión (FTM)* | P2996R13 P3096R12 P3293R3 P3394R4 P3795R2 |
16* | |||||||||
| Sentencias de expansión (FTM)* | P1306R5 | 16 | |||||||||
| Herencia virtual constexpr (FTM)* | P3533R2 | 16 | |||||||||
| Diagnóstico de errores de preprocesador | P2843R3 | 16 | |||||||||
| Permitir adjuntar main al módulo global | P3618R0 | 16 | |||||||||
DR20: Permitir #line antes de declaraciones de módulo
|
P3868R1 | ||||||||||
| DR17: Deducción de argumentos de plantilla de clase para parámetros de plantilla de tipo plantilla | P3865R3 | ||||||||||
| Const-ificación de expresiones de empalme en aserciones de contrato | P3598R0 | ||||||||||
| Característica C++26 |
Documento(s) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ex PGI)* |
Nvidia nvcc |
Cray |
Características de la biblioteca C++26
| Característica C++26 |
Documento(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
|
|---|---|---|---|---|---|---|
| Prueba de éxito o fracaso de las funciones <charconv> ( FTM)*P2497R0 | 14 | 18 | 16.0.0* | std::text_encoding | ||
| : identificación de codificaciones de texto ( FTM)*P1885R12 | P2862R1 14 |
Sobrecargas aritméticas de | ||||
| std::to_string y std::to_wstring usan std::format ( FTM)*P2587R3 | 14 | Verificación de tipos de argumentos de formato | ||||
| ( FTM)*P2757R3 | 15 | Formato de punteros | ||||
| ( FTM)*P2510R3 | 14 | *17 | *19.40* | *Soporte de | ||
| hashing para clases de valor std::chrono ( FTM)*P2592R3 | 16 | rcu | ||||
| <: >Read-Copy Update ( FTM)*P2545R4 | hazard_pointer | |||||
| <: >Hazard Pointers ( FTM)*P2530R3 | std::projected | |||||
| a prueba de ADLP2538R1 | 14 | *18 | *19.38* | *16.0.0* | Ordenamiento estable constexpr | |
| ( FTM)*P2562R1 | 15 | 21 | std::basic_format_arg::visit() | |||
| miembro ( FTM)*P2637R3 | 15 | 19 | std::variant::visit() | |||
| miembro ( FTM)*P2637R3 | 15 | 18 | std::is_within_lifetime | |||
| ( FTM)*P2641R4 | P3450R1 22 (parcial)* |
Extender contenedores asociativos con las sobrecargas heterogéneas restantes | ||||
| ( FTM)*P2363R5 | 16 | Habilitar el uso de | ||||
| std::weak_ptr como claves en contenedores asociativos no ordenados ( FTM)*P1901R2 | 16 | Manejadores nativos en flujos de archivos | ||||
| ( FTM)*P1759R6 | 14 | 18 | 16.0.0* | Interfaz de flujos de cadena con | ||
| std::string_view ( FTM)*P2495R3 | 16 | 19 | Interfaz de | |||
| std::bitset con std::string_view ( FTM)*P2697R1 | 16 | 18 | 16.0.0* | Más | ||
para constexprcmath< y >complex< (> FTM)* ( FTM)*P1383R2
|
4.6 (parcial)* | Agregar los nuevos prefijos SI de 2022 en ratios: | ||||
| std::quecto, std::ronto, std::ronna y std::quetta ( FTM)*P2734R0 | 14 | 17 | *std::function_ref | |||
| : referencia invocable de tipo borrado ( FTM)*P0792R14 | P3961R1 16 |
std::copyable_function | ||||
| ( FTM)*P2548R6 | 16 | std::bind_front | ||||
| , std::bind_back y std::not_fn a invocables NTTP ( FTM)* ( FTM)* ( FTM)*P2714R1 |
16 | std::submdspan() | ||||
| ( FTM)*P2630R4 | P3355R1 P3663R3 P3982R2 16 |
Lenguaje independiente: Opcional | ||||
| ::operator newP2013R5 | 19.38* | Independiente | ||||
| std::char_traits, std::errc y facilidades en: charconv<, >cstdlib<, >cstring<, >cwchar< (> FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)*P2338R4 | 19.38* | Más facilidades independientes | ||||
| ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)*P2198R7 |
19.38* | Aritmética de saturación | ||||
| ( FTM)*P0543R3 | P4052R0 14 |
16 *18 |
16.0.0* | debugging | ||
| <: >Soporte de depuración ( FTM)*P2546R5 | P2810R4 16 |
*linalg | ||||
| <: Una interfaz de álgebra lineal de funciones libres basada en BLAS> ( FTM)*P1673R13 | P3050R2 P3222R0 P3371R5 Hacer la macro |
|||||
| assert() amigable para el usuario P2264R7 | Sí | *Cadenas de formato dinámicas | ||||
| ( FTM)*P2918R2 | P3953R3 14 |
*16 *18 |
16.0.0* | std::span::at() | ||
| ( FTM)*P2821R5 | 14 | 18 | 16.0.0* | Protocolo de tupla agregado a | ||
| std::complex ( FTM)*P2819R2 | 15 | 19 | Una nueva especificación para | |||
| std::generate_canonicalP0952R2 | 16 | 19.42* | Eliminación del typedef obsoleto | |||
| std::allocator::is_always_equalP2868R3 | 15 | 18 | 16.0.0* | Eliminación de la sobrecarga de función de | ||
| std::basic_string::reserve() que no toma argumentos P2870R3 | 18 | 16.0.0* | Eliminación de facetas de conversión Unicode obsoletas ( | |||
| codecvt<) >P2871R3 | 18 | 16.0.0* | Independiente: eliminación de | |||
| std::strtok ( FTM)*P2937R0 | 14 | 19.40* | Biblioteca independiente: Clases parciales | |||
| ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)*P2407R5 | 14 | 19.42* | Biblioteca independiente: | |||
| std::inout, std::expected, std::span ( FTM)* ( FTM)* ( FTM)* ( FTM)*P2833R2 |
14 | 19.42* | DR23: | |||
| std::basic_const_iterator debe seguir la convertibilidad de su tipo subyacente ( FTM)*P2836R1 | P2950R0 14 |
19.40* | DR20: | |||
| std::make_format_args ahora acepta solo referencias a lvalues en lugar de referencias de reenvío P2905R2 | 14 | 18 | 19.40* | 16.0.0* | DR20: Corregir el formato de unidades de código como enteros | |
| ( FTM)*P2909R4 | 13.3 | 18 | 19.40* | 16.0.0* | views::concat | |
| ( FTM)*P2542R8 | 15 | Concatenación de | ||||
| cadenas y vistas de cadenas ( FTM)*P2591R5 | 15 | 19 | Habilitar inicialización de listas para | |||
| algoritmos ( FTM)*P2248R8 | P3217R0 P3787R2 15 |
std::ranges::generate_random | ||||
| ( FTM)*P1068R11 | Comparaciones | |||||
| para std::reference_wrapper y restricciones para comparaciones de std::pair, std::tuple, std::optional y std::variant ( FTM)* ( FTM)*P2944R3 | 14 | 22 | 19 (parcial) *Diseños mdspan rellenados |
|||
| ( FTM)*P2642R6 | 16 | Nuevo CTAD para | ||||
| std::span y std::mdspan con constantes integrales P3029R1 | 16 | 19 | Máximo y mínimo atómicos | |||
| ( FTM)*P0493R5 | 16 | std::formatter | ||||
| std::filesystem::path< (> FTM)*P2845R8 | 16 | Imprimir líneas en blanco con | ||||
| std::println() ( FTM)*P3142R0 | 14 | *19 | *19.41* | *Desdeprecar | ||
| std::polymorphic_allocator::destroyP2875R4 | 14.3 | *15 | 19.41* | Eliminación de strstreams obsoletos | ||
| P2867R2 | 19 | Eliminación de las API de acceso atómico | ||||
| std::shared_ptr obsoletas P2869R4 | Eliminación de | |||||
| std::wstring_convertP2872R3 | 19 | DR23: Permitir una implementación eficiente de | ||||
| std::print ( FTM)*P3107R5 | P3235R3 16 |
19.43* | Constexpr | |||
| placement new ( FTM)*P2747R2 | 15 | 20 | Biblioteca de control de ejecución | |||
| ( FTM)*P2300R10 | P3388R3 P3396R1 P3433R1 P3481R5 P3570R2 P3682R0 P3887R1 Correcciones adicionales de la |
|||||
| biblioteca de control de ejecución P3373R4 | P3826R5 P3986R1 P4154R0 P4159R0 std::inplace_vector |
|||||
| : vector redimensionable dinámicamente con capacidad fija ( FTM)*P0843R14 | P3981R2 P4022R0 16 |
std::philox_engine | ||||
| : motor de números aleatorios basado en contador ( FTM)*P2075R6 | 16 | Soporte de rango | ||||
| std::optional ( FTM)*P3168R2 | P3913R1 16 |
22 (parcial)* | std::is_virtual_base_of | |||
| : rasgo de tipo para detectar clases base virtuales ( FTM)*P2985R0 | 15 | 20 | std::dims | |||
| para std::mdspan ( FTM)*P2389R2 | 16 | 19 | DR11: Especificación formal del tipo de | |||
| std::ignoreP2968R2 | 15 | 19 | 19.42* | DR20: Eliminación del requisito de referencia común de los conceptos indirectamente invocables | ||
| ( FTM)*P2997R1 | 15 | 19 | 19.42* | Deprecar | ||
| std::is_trivial y std::is_trivial_vP3247R2 | 15 | 21 | DR20: Objetos función de algoritmo | |||
| P3136R1 | Sí | Sí | 19.39* | Sí | std::ranges::cache_latest_view | |
| ( FTM)*P3138R5 | 15 | Restricción de los | ||||
| operadores de igualdad de std::expected (FTM)* | P3379R0 | 15 | 22 | |||
| std::aligned_accessor: un accesor de std::mdspan que expresa sobrealineación de punteros (FTM)* | P2897R7 | 16 | ||||
| std::is_sufficiently_aligned: verifica la precondición de alineación de un puntero (FTM)* | P2897R7 | 16 | ||||
| std::atomic_ref::address() (FTM)* | P2835R7 P3936R1 |
16 (parcial)* | 22 (parcial)* | |||
| DR11/20: Tipos con calificación cv en std::atomic y std::atomic_ref | P3323R1 | 16 | 19.44* | |||
| Constexpr std::atomic y std::atomic_ref (FTM)* | P3309R3 | |||||
| Algoritmos de memoria especializada constexpr ( FTM)*P3508R0 | P3369R0 15 |
stdbit.h | ||||
| < y >stdckdint.h< (> FTM)* ( FTM)*P3370R1 | 15 | *16
simd |
||||
| <: >tipos de datos paralelos ( FTM)*P1928R15 | P3430R3 P2876R3 P3691R1 P3922R1 P3690R1 P3932R0 P4012R1 16 (parcial) |
*Operaciones matemáticas SIMD | ||||
| P1928R15 | P3844R4 Una utilidad para crear |
|||||
| entornos de ejecuciónP3325R5 | Tipos de excepción constexpr, p.ej. | |||||
| std::bad_alloc, std::bad_cast, etc. ( FTM)*P3068R6 | P3378R2 P3842R2 16 |
std::simd::chunk | ||||
| P3441R2 | 16 | Operaciones de bits SIMD | ||||
| ( FTM)*P2933R4 | Soporte de valores | |||||
| std::complex entrelazados en std::simd ( FTM)*P2663R7 | Desarmar y deprecar | |||||
P3475R1std::memory_order::consume
|
Poner | |||||
| std::monostate en utility<P0472R3> | 15 | 21 | 19.50* | std::indirect | ||
| ( FTM)*P3019R14 | 16 | std::polymorphic | ||||
| ( FTM)*P3019R14 | 16 | Más contenedores y adaptadores constexpr | ||||
| ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)*P3372R3 |
16 (parcial) | *21 (parcial)* | 22 (parcial)* Constexpr |
|||
| std::inplace_vector para tipos no triviales ( FTM)*P3074R7 | std::ranges::as_input_view | |||||
| ( FTM)*P3137R3 | P3828R1 15 |
*16 *std::ranges::approximately_sized_range |
||||
| y std::ranges::reserve_hint ( FTM)*P2846R6 | hive | |||||
| <: Un contenedor basado en cubos que reutiliza ubicaciones de memoria de elementos borrados> ( FTM)*P0447R28 | Soporte de biblioteca para puntos de control observables | |||||
| ( FTM)*P1494R5 | P3641R0 16 |
contracts | ||||
| <: Soporte de manejo de violación de contrato> ( FTM)*P2900R14 | P3819R0 16 |
Endurecimiento de la biblioteca estándar | ||||
| P3471R4 | P3697R1 P3878R1 15 |
(parcial)*19.44* | (parcial)*19.50* (parcial)*Biblioteca independiente: | |||
| algorithm<, >execution<, >memory<, >numeric< y > random< (> FTM)* ( FTM)* ( FTM)* ( FTM)* ( FTM)*P2976R1 |
DR20: Conversión de iteradores contiguos a punteros | |||||
| P3349R0 | 15 | 19.51* | meta | |||
| <: Soporte de biblioteca de reflexión> ( FTM)*P2996R13 | P3394R4 P3293R3 P3096R12 P3795R2 P4156R0 16 (parcial) |
*Excepciones constexpr como manejo de errores en reflexión | ||||
| ( FTM)*P3560R2 | 16 | std::define_static_object | ||||
| , std::define_static_array, std::define_static_string ( FTM)*P3491R3 | 16 | std::simd::basic_vec | ||||
| y std::simd::basic_mask son tipos de rango P3480R6 | 16 | std::optional | ||||
| T< (&> FTM)* ( FTM)*P2988R12 | P3836R2 16 |
22 | std::string::subview() | |||
| y std::string_view::subview() ( FTM)*P3044R2 | 16 | 22 | Constexpr | |||
| std::shared_ptr y amigos ( FTM)*P3037R6 | Tipos de tarea de corrutina | |||||
| ( FTM)*P3552R3 | P3980R1 P3927R2 P3941R4 P4151R1 Ámbitos asíncronos: creación de ámbitos para concurrencia no secuencial |
|||||
| ( FTM)*P3149R11 | P3815R1 Planificador paralelo |
|||||
| ( FTM)*P2079R10 | P3804R2 Diagnósticos de alta calidad de senders con excepciones constexpr |
|||||
| P3557R3 | Adaptadores de sender | |||||
| execution::write_env y execution::unstoppable | P3284R4 | |||||
| std::views::indices (FTM)* | P3060R3 | 16 | ||||
| Algoritmos de rango paralelos (FTM)* | P3179R9 P3709R2 |
|||||
| Mín/máx atómico de punto flotante (FTM)* | P3008R6 | |||||
| Operaciones de reducción atómica (FTM)* | P3111R8 | |||||
| Operaciones de permutación SIMD (FTM)* | P2664R11 | |||||
| std::mdspan::at() | P3383R3 | 16 | ||||
| std::exception_ptr_cast() (FTM)* | P2927R3 P3748R0 P3981R2 |
16 (parcial)* | ||||
| Ordenamiento de tipos constexpr estandarizado (FTM)* | P2830R10 P3778R0 P4140R0 |
16 | ||||
| std::constant_wrapper (FTM)* | P2781R9 P3978R3 |
16 | 23 | |||
| Cambios en std::apply: std::apply_result, std::is_applicable y std::is_nothrow_applicable (FTM) | * | |||||
| P1317R2Hacer coherente el uso del asignador de tipo borrado en std::promise y std::packaged_task | P3503R3 | 17 | ||||
| 19.51*std::filesystem::path::display_string() y std::filesystem::path::native_encoded_string() (FTM) | * | |||||
| P2319R5Hacer menos sorprendente std::istream::ignore() | P3223R2 | 16 | ||||
| 19.50*DR11: Inconsistencias resueltas en begin/end para std::valarray y std::initializer_list (FTM) * (FTM) | * | P3016R6 | ||||
| 19.51*Correcciones de std::flat_meow (FTM) * (FTM) | * | P3567R2 | 22 | |||
| 19.51*Hacer std::integer_sequence utilizable en enlaces estructurados y sentencias de expansión (FTM) | * | P1789R3 | 16 | |||
| 22 Formato de texto constexpr (FTM) | * | |||||
| P3391R2 std::start_lifetime (FTM) | * | |||||
| P3726R2std::is_structural: rasgo de tipo para detectar tipos estructurales (FTM) | * | P3856R8 | ||||
| 16 std::constant_wrapper usado como argumento de constructor de std::function_ref | P3948R1 | |||||
16
signed charSoporte de unsigned char y |
en la generación de números aleatorios | |||||
| P4037R1 Detección de reemplazabilidad definida por la implementación del manejador de violación de contrato mediante macro de característica (FTM)* |
P3886R0 | 16 | ||||
| DR20: Hacer privados los constructores definidos por el usuario de iteradores/centinelas de vista | P3059R2 | Sí | ||||
| DR20: Extensiones de vista de filtro para un uso más seguro (FTM)* | P3725R3 | 16 | ||||
| Característica C++26 |
Documento(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
* - pase el cursor sobre una celda marcada con la estrella * para ver notas emergentes adicionales.
DRnn - el número nn después de "DR" denota la revisión C++ objetivo a la que se aplica el Reporte de Defecto, p.ej., DR20 → C++20.
Enlaces externos
| 1. | C++26 - Wikipedia |