Namespaces
Variants

C++23

From cppreference.net

La revisión actual del estándar C++.

Contenidos

Nuevas características del lenguaje

void f ( int & x )
{
if ( x )
goto END ;
x = 42 ;
END :
}
  • Declaraciones de alias ( using ) en sentencias de inicialización ( P2360R0 ), por ejemplo
for ( using T = int ; T e : v )
/* ... */

Nuevas características de la biblioteca

Nuevos módulos

Nuevos encabezados

Encabezados de compatibilidad C:

Características de la biblioteca

Utilidades Generales
Biblioteca de Corrutinas
Diagnóstico
Algoritmo, Iteradores y Rangos
Contenedores
Soporte en tiempo de compilación
Gestión de Memoria
Procesamiento de Cadenas y Texto
E/S e impresión

Características obsoletas

Características eliminadas
  • Soporte para recolección de basura y detección de fugas basada en alcanzabilidad. ( P2186R2 )
  • Soporte para concatenación de literales de cadena de caracteres anchos mixtos concatenation , por ejemplo, const auto * no = u "q" U "p" no es válido. ( P2201R1 )
  • Literales de caracteres anchos no codificables y literales de caracteres anchos multicarácter, por ejemplo wchar_t x = 'db' no es válido. ( P2362R3 )
Características obsoletas
Deprecaciones revertidas
  • El operator, (operador coma) en expresiones de subíndice (pero la semántica ha sido modificada para admitir el operator [ ] multidimensional sobrecargable).
  • Algunos encabezados de C (los encabezados <*.h> correspondientes para compatibilidad con C) ( P2340R1 )

Informes de defectos

Soporte del compilador

Artículo Principal: C++23 compiler support

Características principales del lenguaje C++23

**Cambios realizados:** - Se tradujo únicamente el texto del atributo `title`: "Feature-testing macro" → "Macro de prueba de características" - Se preservaron todos los tags HTML, atributos y formato original - No se tradujo el contenido dentro de las etiquetas ` ` (código C++) - Se mantuvieron los términos técnicos de C++ y las referencias a documentos
Característica de C++23

Documento(s)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Sufijo literal para (con signo) size_t ( FTM ) * P0330R8 11 13 19.43* 13.1.6* 6.5 2022.2 23.9
Hacer () más opcional para lambdas P1102R2 11 13 19.44* 13.1.6* 6.3 2022.2 22.5
if consteval ( FTM ) * P1938R3 12 14 19.44* 14.0.0* 6.3 2022.2 24.1
Eliminación del Soporte de Recolección de Basura P2186R2 12 N/A 19.30* N/A N/A
Conversiones contextuales restrictivas en static_assert y constexpr if P1401R5 9 13 (parcial)*
14
14.0.0* 2022.2 20.7
Recorte de espacios en blanco antes del empalme de líneas P2223R2 6.7 2022.2
Hacer que el orden de declaración del diseño sea obligatorio P1847R4 2022.2
Eliminación de la concatenación de literales de cadena anchos mixtos concatenation P2201R1
Funciones miembro de objeto explícito (deducción de this )  ( FTM ) * P0847R7 14 18
19*
19.32*
(parcial)*
19.43*
6.3 22.5
auto(x) y auto{x} ( FTM ) * P0849R8 12 15 14.0.3* 6.4 2022.2 23.3
#elifdef y #elifndef P2334R1 12 13 19.40* 13.1.6* 6.5 2022.2 23.9
Variables no literales (y etiquetas y gotos) en funciones constexpr ( FTM ) * P2242R3 12 15 19.43* 14.0.3* 6.3 2022.2 22.5
Codificación consistente de literales de caracteres P2316R2 19.30* 2022.2
Conjuntos de caracteres y codificaciones P2314R4 10 2022.2
Extender la init-statement (del for bucle ) para permitir alias-declaration P2360R0 12 14 14.0.0* 2022.2
Operador de subíndice multidimensional ( FTM ) * P2128R6 12 15 19.42* 14.0.3* 2022.2
Atributos en lambdas P2173R1 9 13 19.44* 13.1.6* 6.6 2022.2 22.5
#warning P2437R1 Sí* 15.0.0* 6.5 2023.2
Eliminar literales de caracteres anchos no codificables y literales de caracteres anchos multibyte P2362R3 13 14 15.0.0* 6.7 2023.2
Etiquetas al final de sentencias compuestas P2324R2 13 16 16.0.0* 6.5 2023.2 23.9
Secuencias de escape delimitadas P2290R3 13 15 15.0.0* 6.7 2023.2
Secuencias de escape de caracteres universales con nombre ( FTM ) * P2071R2 13 15 15.0.0* 6.7 2023.2
Relajando algunas constexpr restricciones  ( FTM ) * P2448R2 13 17 (parcial)
19
2024.0 (parcial)
Movimiento implícito más simple  ( FTM ) * P2266R3 13 13 6.7 2022.2
static operator ( ) ( FTM ) * P1169R4 13 16 19.44* 16.0.0* 6.7 2023.2
Requisitos para tipos extended floating-point opcionales P1467R9 13 N/A 6.4
Deducción de argumentos de plantilla de clase a partir de constructores heredados P2582R1 14
Atributo [[ assume ]] P1774R8 13 19
Soporte para UTF-8 como codificación portable de archivos fuente P2295R6 13* 15* 19.0 (Update 2)* * 15.0.0* 2023.2
static operator [ ] ( FTM ) * P2589R1 13 16 19.44* 16.0.0* 6.7 2023.2
Permitir static constexpr variables en constexpr functions  ( FTM ) * P2647R1 13 16 16.0.0* 2023.2
Extensión del tiempo de vida de temporales en el inicializador de bucles for basados en rango  ( FTM ) * P2644R1
P2718R0
CWG2659
15 19
Declaraciones y dónde encontrarlas P1787R6
DR11: Cambiar el alcance del lambda trailing-return-type P2036R3
P2579R0
17 2023.2
DR20: Exportaciones significativas P2615R1 15 17 (parcial)
DR20: consteval necesita propagarse hacia arriba ( FTM ) * P2564R3 14 17 16.0.0* 6.7 2024.0
DR98: Sintaxis de Identificadores C++ usando el Anexo 31 del Estándar Unicode P1949R7 12 14 14.0.0* 6.4 2022.2
DR11: Permitir atributos duplicados attributes P2156R1 11 13 13.1.6* 6.5 23.9
DR20: Ajustando el valor de la macro de prueba de características __cpp_concepts P2493R0 12 19.32* 6.4 23.3
DR98: Relajar requisitos en wchar_t para coincidir con prácticas existentes P2460R2 15.0.0* N/A 2023.2
DR11: Uso de punteros y referencias desconocidos en expresiones constantes P2280R4 14 20 *
DR20: El Operador de Igualdad Que Estás Buscando P2468R2 13 16 16.0.0* 2023.2
DR20: char8_t Corrección de Compatibilidad y Portabilidad  ( FTM ) * P2513R4 13 16 19.34* 16.0.0* 2023.2
DR98/11: Aclarar el reporte de directivas de diagnóstico y permitir static_assert de expresiones no dependientes de valor en un contexto de plantilla CWG2518 13 17 16.0*
(parcial)*
19.40*


Característica de C++23


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++23

Los únicos cambios realizados fueron: - Traducción del texto del atributo `title`: "Feature-testing macro" → "Macro de prueba de características" - Se preservaron todos los tags HTML, atributos, y el contenido dentro de ` ` (que contiene código C++) - Se mantuvieron los términos específicos de C++ como `std::forward_like()`, `__cpp_lib_forward_like`, y `FTM`
Característica de C++23

Documento(s)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
Biblioteca de seguimiento de pila ( FTM ) * P0881R7
P2301R1
12 (parcial)*
14*
19.34*
<stdatomic.h> ( FTM ) * P0943R6 12 15 19.31* 14.0.3*
std::is_scoped_enum ( FTM ) * P1048R1 11 12 19.30* 13.0.0*
std::basic_string::contains() , std::basic_string_view::contains() ( FTM ) * P1679R3 11 12 19.30* 13.0.0*
std::to_underlying ( FTM ) * P1682R3 11 13 19.30* 13.1.6*
Relajando requisitos para time_point<>::clock P2212R2 N/A N/A N/A N/A
Proporcionar retroalimentación de tamaño en la interfaz Allocator  ( FTM ) * P0401R6 15 19.30* 14.0.3*
<spanstream> : flujo de cadena con búfer basado en std::span ( FTM ) * P0448R4 12 19.31*
std::out_ptr() , std::inout_ptr() ( MFT ) * P1132R8 14 19 19.30*
constexpr type_info::operator==() ( FTM ) * P1328R1 12 17 19.33* *
19.34*
15.0.0*
Constructores de pares de iteradores para std::stack y std::queue ( FTM ) * P1425R4 12 14 19.31* 14.0.3*
Contexto de no deducción para asignadores en guías de deducción de contenedores P1518R2 12 * 13 * 19.31* * 13.1.6* *
ranges::starts_with() y ranges::ends_with() ( FTM ) * P1659R3 17 (parcial)*
18
19.31* 16.0.0*
Prohibición de la construcción de std::basic_string y std::basic_string_view desde nullptr P2166R1 12 13 19.30* 13.1.6*
std::invoke_r() ( FTM ) * P2136R3 12 17 19.31* 15.0.0*
Constructor de rango constructor para std::basic_string_view P1989R2 11 14 19.30* 14.0.3*
Argumentos de plantilla predeterminados para el std::pair constructor de reenvío de constructor P1951R1 14 14 19.30* 14.0.3*
Eliminar Recolección de Basura y Detección de Fugas Basada en Alcanzabilidad ( soporte de biblioteca ) P2186R2 12 14 19.30* 14.0.3*
zip: views::zip , views::zip_transform , views::adjacent , y views::adjacent_transform ( FTM ) * P2321R2 13 15 (parcial)* 19.33* (parcial)* * *
19.37*
14.0.3*
Sobrecargas de borrado heterogéneo para contenedores asociativos  ( FTM ) * P2077R3 19.32*
std::byteswap() ( FTM ) * P1272R4 12 14 19.31* 14.0.3*
Impresión volatile T * P1147R1 11.3 14 19.31* 14.0.3*
basic_string::resize_and_overwrite() ( FTM ) * P1072R10 12 14 19.31* 14.0.3*
Operaciones monádicas para std::optional ( FTM ) * P0798R8 12 14 19.32* 14.0.3*
std::move_only_function ( FTM ) * P0288R9 12 19.32*
Agregar una especificación condicional noexcept a std::exchange P2401R0 12 14 19.25* 14.0.3*
Requerir que std::span y std::basic_string_view sean TriviallyCopyable P2251R1
Aclarando el estado de los "C headers" P2340R1
<expected> ( FTM ) * P0323R12
P2549R1
12 16 19.33* 15.0.0*
constexpr para <cmath> y <cstdlib> ( FTM ) * P0533R9 4.6 (parcial)*
std::unreachable() ( FTM ) * P0627R6 12 15 19.32* 14.0.3*
Desaprobando std::aligned_storage y std::aligned_union P1413R3 13 16 19.33*
std::reference_constructs_from_temporary & std::reference_converts_from_temporary ( FTM ) * P2255R2 13 (parcial)*
14
21 (parcial)*
constexpr std::unique_ptr ( FTM ) * P2273R3 12 16 19.33* 15.0.0*
Construcción de contenedores y cadenas desde rangos con ranges::to() , constructores etiquetados, funciones miembro de inserción y asignación  ( FTM ) * ( FTM ) * P1206R7 14 (parcial)*
15
17 19.34* 15.0.0*
Soporte de tubería para adaptadores de rango definidos por el usuario ( ranges::range_adaptor_closure , std::bind_back )  ( FTM ) * ( FTM ) * P2387R3 13 (parcial)*
14
19 19.34*
ranges::iota() , ranges::shift_left() , y ranges::shift_right() ( FTM ) * ( FTM ) * P2440R1 13 (parcial)* 19.34*
views::join_with ( FTM ) * P2441R2 13 19.34*
views::chunk y views::slide ( FTM ) * ( FTM ) * P2442R1 13 19.33*
views::chunk_by ( FTM ) * P2443R1 13 18 19.33* 16.0.0*
std::mdspan : una referencia de arreglo multidimensional no propietaria  ( FTM ) * P0009R18
P2599R2
P2604R0
P2613R1
P2763R1
17 (parcial)*
18
19.39* 15.0.0*
<flat_map> ( FTM ) * P0429R9 15 20
<flat_set> ( FTM ) * P1222R4 15 21
ranges::find_last() , ranges::find_last_if() , y ranges::find_last_if_not() ( FTM ) * P1223R5 13 19 19.36*
Biblioteca Independiente: Fácil <utility> , <ranges> , y <iterator> P1642R11 13 * N/A
views::stride ( FTM ) * P1899R3 13 19.34*
Compatibilidad entre std::tuple y objetos tipo tupla  ( FTM ) * P2165R4 14 2.9 (parcial)* 19.36* (parcial) *
19.37*
parcial*
Rectificación de iteradores constantes, centinelas y rangos. views:: as_const ( FTM ) * P2278R4 13 19.35* (parcial)*
19.36*
Formateo de Rangos  ( FTM ) * P2286R8 15 (parcial)*
15.2
16 19.37* (parcial)*
19.39* (parcial)*
19.41* (parcial)*
19.42*
15.0.0*
Mejorar el formato predeterminado de contenedores formatting ( FTM ) * P2585R1 15 16 (parcial)*
17
19.42* 15.0.0*
Biblioteca de salida formateada <print> ( FTM ) * P2093R14
P2539R4
14 17 (parcial)*
18
19.37* 15.0.0* *
16.0.0*
Formateo std::thread::id y std::stacktrace ( FTM ) * P2693R1 14 17 (parcial)* 19.38* 15.0.0*
constexpr para las sobrecargas integrales de std::to_chars() y std::from_chars() ( FTM ) * P2291R3 13 16 19.34* 15.0.0*
ranges::contains() y ranges::contains_subrange() ( FTM ) * P2302R4 13 18 (parcial)*
19
19.34* 16.0.0* *
Algoritmos de plegado de rangos ( FTM ) * P2322R6 13 19.35*
views::cartesian_product ( FTM ) * P2374R4
P2540R1
13 19.37*
Agregar soporte para tipos de solo movimiento a los conceptos de comparación ( equality_comparable , totally_ordered , three_way_comparable )  ( FTM ) * P2404R3 19.36*
Iteradores de rangos como entradas para algoritmos no ranges  ( FTM ) * P2408R5 19.34*
constexpr std::bitset ( FTM ) * P2417R2 13 16 19.34* 15.0.0*
basic_string::substr() && P2438R2 16 19.34* 15.0.0*
views::as_rvalue ( FTM ) * P2446R2 13 16 19.34* 15.0.0*
Módulos de la Biblioteca Estándar  ( FTM ) * P2465R3 15* 17 (parcial)* 19.35*
(parcial)*
19.36*
std::forward_like() ( FTM ) * P2445R1 14 16 19.34* 15.0.0*
Soporte para modo exclusivo en std::fstream ( FTM ) * P2467R1 12 18 19.36* 16.0.0*
views::repeat ( FTM ) * P2474R2 13 17 19.36* 15.0.0*
Relajación de los adaptadores de rango para permitir tipos de solo movimiento  ( FTM ) * P2494R2 14 17 19.34* 15.0.0*
std::basic_string_view el constructor de rango de constructor debe ser explícito P2499R0 12.2 16 19.34* 15.0.0*
std::generator : generador síncrono de corrutinas para rangos  ( FTM ) * P2502R2
P2787R0
14 19.43*
Agregar una especificación condicional noexcept a std::apply P2517R1 10 18 19.34* 16.0.0*
Gestión explícita del tiempo de vida ( std::start_lifetime_as )  ( FTM ) * P2590R2
P2679R2
Aclarar el manejo de codificaciones en el formateo localizado de tipos chrono  ( FTM ) * P2419R2 15* 19.34* *
std::move_iterator no siempre debería ser input_iterator ( FTM ) * P2520R0 12.3* 17* 19.34* * 15.0.0*
Guías de deducción actualizadas para operadores de llamada con parámetro de objeto explícito LWG3617 14 19.34*
Actualización de guías de deducción para static operator ( ) P1169R4 13 16 19.39* 15.0.0*
Nombres estándar y soporte de biblioteca para tipos de punto flotante extendidos P1467R9 13 19.37* *
Operaciones monádicas para std::expected ( FTM ) * P2505R5 13 17 19.36* 15.0.0*
views::enumerate ( FTM ) * P2164R9 13 19.37*
std::is_implicit_lifetime ( MFT ) * P2674R1 20
std::common_reference_t de std::reference_wrapper debería ser un tipo de referencia  ( FTM ) * ( FTM ) * P2655R3 19.37*
Prohibir la especialización por parte del usuario de std::allocator_traits P2652R2 19 19.37*
Desaprobando std::numeric_limits::has_denorm P2614R2 18 19.37* 16.0.0*
Hacer que los Constructores Multi-Parámetro de las view s explicit P2711R1 17 (parcial)* 19.36* * 15.0.0*
DR20: Relajando Ranges Solo un Poquito  ( FTM ) * P2609R3 15 20 19.37*
DR20: Almacenamiento de Iteradores de Almacenamiento Para un Aplanamiento Correcto P2770R0 14 18 19.37*
DR17: std::visit() para clases derivadas de std::variant ( FTM ) * P2162R2 11.3 13 19.20* *
19.30*
13.1.6*
DR20: Rangos prestados condicionalmente P2017R1 11 16 19.30*
DR20: Reparación de adaptadores de rango de entrada y std::counted_iterator P2259R1 12 19.30* (parcial)*
19.31*
DR20: views::join debería unir todas las vistas de rangos P2328R1 11.2 15 19.30* 14.0.3*
DR20: view no requiere default_initializable ( FTM ) * P2325R3 11.3 16 19.30* 15.0.0*
DR20: Los objetos adaptadores de rango enlazan argumentos por valor P2281R1 11 14 19.29 (16.10)*
(parcial)*
19.31*
14.0.3*
DR20: constexpr para std::optional y std::variant ( FTM ) * ( FTM ) * P2231R1 11.3 (parcial)*
12
13 (parcial)*
19
19.31* 13.1.6* (parcial)
DR20: views::lazy_split y rediseñado views::split P2210R2 12 16 19.31* 15.0.0*
DR20: Corrección ranges::istream_view P2432R1 12 16 19.31* 15.0.0*
DR20: view con propiedad  ( FTM ) * P2415R2 12 14 19.31* 14.0.3*
DR20: Corrección del manejo de configuraciones regionales en formateadores de chrono  ( FTM ) * P2372R3
P2418R2
13 19.31*
DR20: Limpieza de tipos de clase entera P2393R1 19.32*
DR20: Comprobaciones de cadenas de formato en tiempo de compilación; Reducción del tamaño del código binario de std::format() family  ( FTM ) * P2216R3 13 14 (parcial)*
15
19.32* 14.0.3*
DR20: Agregar soporte para tipos no constantes formateables a std::format P2418R2 13 15 19.32* 14.0.3*
DR20: std::basic_format_string P2508R1 13 15 19.35* 14.0.3*
DR20: Las Pastillas de Veneno son Demasiado Tóxicas  ( FTM ) * P2602R2 14 19 19.36*
DR20: std::format permisos de caracter de relleno P2572R1 14 17 19.37*
DR20: Mejorando std::format la estimación de ancho P2675R1 14 17 19.38*
DR20: std::barrier garantías de finalización de fase  ( FTM ) * P2588R3 19.28 (16.8)* *
19.36*


Característica de C++23


Documento(s)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

* - pase el cursor sobre una celda marcada con el asterisco * para ver notas adicionales emergentes.
DR nn - el número nn después de "DR" denota la revisión objetivo de C++ a la que se aplica el Informe de Defectos, por ejemplo, DR20 → C++20.

Enlaces externos

1. C++23 - Wikipedia