Soporte del compilador para C++26
De es.cppreference.net
* - 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 de C++ objetivo a la que se aplica el Informe de defectos, por ejemplo, DR20 → C++20.
Características principales 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 del análisis léxico | P2621R3 | Sí | 3.3 | 16.0.0* | |||||||
| DR98: Hacer que las literales de cadena no codificables sean mal formadas | 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* | |||||||
Constexpr cast 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 placeholder 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 vinculaciones estructuradas (FTM)* | P0609R3 | 15 | 19 | ||||||||
Comportamiento erróneo para lecturas no inicializadas, [[indeterminate]] atributo
|
P2795R5 P3684R1 |
16 | |||||||||
= delete("reason"); (FTM)*
|
P2573R2 | 15 | 19 | ||||||||
| Amigos variádicos (FTM)* | P2893R3 | 15 | 20 | ||||||||
| DR98: Aclaración de reglas para elisión de llaves en inicialización de agregados | P3106R1 | Sí | 17 | ||||||||
| DR20: Prohibir que las declaraciones de módulo 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 vinculación estructurada como condición (FTM) | * | P0963R3 | 15
6 (parcial)* |
||||||||
| 21 Ordenamiento de restricciones que involucran expresiones fold (FTM) | * | P2963R3 | |||||||||
| 19 Eliminar | un puntero a un tipo incompleto debería ser mal formado | P3144R2 | 15 | 19 | |||||||
| 6.7 Las vinculaciones estructuradas pueden introducir un paquete (FTM | ) | * | P1061R10 | ||||||||
| 16 21 Vinculaciones estructuradas | constexpr | y referencias a variables constexpr P2686R5 | 16* | 22 (parcial) | |||||||
| *6.7 Excepciones constexpr (FTM | ) | * | |||||||||
| Coma variádica Oxford | P3176R1 | 15 | 20 | ||||||||
| Eliminación de comparaciones de arrays obsoletas | P2865R6 | 15 | 20 | ||||||||
#embed (FTM)*
|
P1967R14 | 15 | 19* | ||||||||
| Parámetros de plantilla 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 del 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 | ||||||||||
| Conversión a const de expresiones splice 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 fallo 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 Formateo de punteros (FTM) | * | P2510R314 | *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 | |||||
| ADL-proof std::projected | P2538R1 | 14* | 18* | 19.38** | 16.0.0* | |
| Ordenamiento estable constexpr (FTM)* | P2562R1 | 15 | 21 | |||
| Miembro std::basic_format_arg::visit() (FTM)* | P2637R3 | 15 | 19 | |||
| Miembro std::variant::visit() (FTM)* | P2637R3 | 15 | 18 | |||
| std::is_within_lifetime (FTM)* | P2641R4 P3450R1 |
22 (parcial)* | ||||
| Extensión de contenedores asociativos con las sobrecargas heterogéneas restantes (FTM)* | P2363R5 | 16 | ||||
| Habilitación del uso de std::weak_ptr como claves en contenedores asociativos no ordenados (FTM)* | P1901R2 | 16 | ||||
| Manejadores nativos en flujos de archivo (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 constexpr para <cmath> y <complex> (FTM)* (FTM)*
|
P1383R2 | 4.6 (parcial)* | ||||
| Adición de 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 con borrado de tipo (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 new | P2013R5 | 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* | ||
| <depuración>: 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 que la macro assert() sea fácil de usar | 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 añadido a std::complex (FTM)* | P2819R2 | 15 | 19 | |||
| Una nueva especificación para std::generate_canonical | P0952R2 | 16 | 19.42* | |||
| Eliminación del typedef obsoleto std::allocator::is_always_equal | P2868R3 | 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 debería seguir la convertibilidad de su tipo subyacente (FTM)* | P2836R1 P2950R0 |
14 | 19.40* | |||
| DR20: std::make_format_args ahora acepta solo referencias lvalue 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 cadena (FTM)* | P2591R5 | 15 | 19 | |||
| Habilitación de la 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 con relleno (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 | ||||
| Impresión de líneas en blanco con std::println() (FTM)* | P3142R0 | 14* | 19* | 19.41** | ||
| Desobsolecer std::polymorphic_allocator::destroy | P2875R4 | 14.3* | 15 | 19.41* | ||
| Eliminación de strstreams obsoletos | P2867R2 | 19 | ||||
| Eliminación de las API de acceso atómico obsoletas de std::shared_ptr | ||||||
| P2869R4Eliminación de | std::wstring_convert | P2872R3 | ||||
| 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 |
|||||
| P3887R1Correcciones adicionales de la biblioteca de control de ejecución |
P3373R4 P3826R5 P3986R1 P4154R0 |
|||||
| P4159R0std::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 para 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::ignore | P2968R2 | 15 | 19 | ||
| 19.42* DR20: Eliminación del requisito de referencia común de los conceptos invocables indirectamente (FTM) | * | P2997R1 | 15 | 19 | ||
| 19.42*Deprecación de std::is_trivial y | std::is_trivial_v | P3247R2 | 15 | |||
| 21 | DR20: Objetos de 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 accessor 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 cv-cualificados en std::atomic y | std::atomic_ref | P3323R1 | 16 | |||
| 19.44*Constexpr std::atomic y std::atomic_ref (FTM) | * | |||||
| P3309R3Constexpr algoritmos de memoria especializados (FTM) | * P3508R0 |
P3369R0 | ||||
| <15 >stdbit.h< y > stdckdint.h (FTM) * (FTM) | * | P3370R115 * |
||||
| <16 >simd: tipos de datos paralelos (FTM) | * P1928R15 P3430R3 P2876R3 P3691R1 P3922R1 P3690R1 P3932R0 |
P4012R116 (parcial) | ||||
| * | Operaciones matemáticas SIMD
P1928R15 |
|||||
| P3844R4Una utilidad para crear | entornos de ejecución | |||||
| P3325R5Tipos 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) | * | |||||
| P2933R4Soporte de valores std::complex intercalados en std::simd (FTM) | * | |||||
P2663R7std::memory_order::consume
|
Desactivar y deprecar | |||||
| P3475R1Poner 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) |
* | P3372R316 (parcial) | * 21 (parcial)* |
|||
| 22 (parcial)*Constexpr std::inplace_vector para tipos no triviales (FTM) | * | |||||
| P3074R7 std::ranges::as_input_view (FTM) | * P3137R3 |
P3828R115 *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 violaciones de contrato (FTM) | * P2900R14 |
P3819R0 | ||||
| 16 | Endurecimiento de la biblioteca estándar
P3471R4 P3697R1 |
P3878R115 | (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 |
P4156R016 (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 emisor de alta calidad con excepciones constexpr | |||||
| P3557R3execution::write_env y execution::unstoppable | adaptadores de emisor | |||||
| P3284R4 std::views::indices (FTM) | * | P3060R3 | ||||
| 16 Algoritmos de rango paralelos (FTM) | * P3179R9 |
|||||
| P3709R2 Mín/máx atómico en 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 |
P3981R216 (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 con borrado de tipo 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 que std::istream::ignore() | sea menos sorprendente | 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 que std::integer_sequence sea utilizable en enlaces estructurados y sentencias de expansión (FTM) | * | P1789R3 | 16 | |||
| 22 Formateo 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 generación de números aleatorios | |||||
| P4037R1 Detección de reemplazabilidad definida por la implementación del manejador de violación de contrato utilizando la 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 | ||||
| Característica C++26 |
Documento(s) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |