Namespaces
Variants

C++23

С ru.cppreference.net
< cpp

Текущая редакция стандарта C++.

Новые возможности языка

void f(int& x)
{
if (x)
goto END;
x = 42;
END:
}
  • Объявления псевдонимов (using) в инициализаторах (P2360R0), например
for (using T = int; T e : v)
/* ... */

Новые возможности библиотеки

Новые модули

Новые заголовки

Заголовки для совместимости с C:

Возможности библиотеки

Общие утилиты
  • std::expected: новый тип словаря для возврата результата функции (<expected>) (P0323R12, P2549R1)
  • std::move_only_function: обёртка для вызываемых объектов только для перемещения (P0288R9)
  • std::bind_back: обёртка для вызова (P2387R3)
  • std::byteswap: меняет порядок байтов (P1272R4)
  • std::forward_like (P2445R1)
  • std::invoke_r: вызывает Callable объект (P2136R3)
  • std::to_underlying: служебная функция для получения базового значения enum (P1682R3)
  • std::unreachable: функция для обозначения недостижимого кода (P0627R6)
  • Монадические операции (transform, or_else, и and_then) для std::optional (P0798R8) и std::expected (P2505R5)
  • std::tuple совместим с другими кортежеподобными объектами (P2165R4)
  • Добавление аргументов по умолчанию для std::pair's конструктора с пересылкой (P2718R0)
  • std::basic_common_reference специализация для std::reference_wrapper порождающая ссылочные типы (P2655R3)
Библиотека корутин
Диагностика
)
)
)
)
)
  • Обработка строк и текста
    • std::basic_string::containsНовые функции-члены и изменения в строковых типах: std::basic_string_view::contains и (P1679R3
    • )nullptrЗапрет конструирования из std::basic_string для std::basic_string_view и (P2166R1
    • )std::basic_string_viewЯвный конструктор диапазона для (P1989R2
    • std::basic_string::resize_and_overwrite) (P1072R10
    • )std::basic_string::substrПерегрузка по rvalue-ссылке для эффективного среза (P2438R2
  • )std::thread::idФорматирование диапазонов, кортежей, экранированного представления символов и строк, , и stacktraces. (P2286R8) (P2585R1) (P2693R1
)

)

Устаревшие возможности
)
  • std::aligned_storageПомеченные как устаревшиеstd::aligned_union и (P1413R3
  • std::numeric_limits::has_denorm) (P2614R2
)
  • Отозванные устареванияoperator,Оператор operator[] (оператор запятой) в выражениях индексации (но семантика была изменена для поддержки перегружаемой многомерной индексации
  • ).<*.h>Некоторые заголовки C (соответствующие заголовки для совместимости с C) (P2340R1

)

Отчёты об ошибках

Поддержка компиляторовОсновная статья:

Поддержка компиляторов C++23

Основные возможности языка C++23

 
Возможность C++23

 
Документ(ы)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (бывш. PGI)*
Nvidia nvcc
CrayСуффикс литерала для (знакового)  size_t (FTM) * P0330R8 11 13 19.43* 13.1.6* 6.5 2022.2
23.9 ()Сделать более необязательным для лямбд 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 Удаление поддержки сборки мусора P2186R2 12 Н/Д 19.30* Н/Д
Н/ДСужение контекстных преобразований в static_assert и constexpr if P1401R5 9
13 (частично)*
14 19.44* 14.0.0* 2022.2
20.7 Удаление пробелов перед склейкой строк P2223R2 Да Да 19.50* Да 6.7 2022.2
Да Сделать порядок объявления в макете обязательным P1847R4 Да Да 19.30* Да 2022.2
Да Удаление смешанной широкой строковой литеральной конкатенации P2201R1 Да Да 19.44* Да Да Да
Да Явные функции-члены с явным параметром объектаthis (вывод  ) (FTM) * P0847R7 14
18
19*
19.32*
(частично)*
19.43* 6.3
auto(x)22.5 auto{x}  и (FTM) * P0849R8 12 15 19.50* 14.0.3* 6.4 2022.2
#elifdef23.3 #elifndef и P2334R1 12 13 19.40* 13.1.6* 6.5 2022.2
23.9 Нелитеральные переменные (и метки, и goto) в constexpr  функциях (FTM) * P2242R3 12 15 19.43* 14.0.3* 6.3 2022.2
22.5 Согласованная кодировка символьных литералов P2316R2 Да Да 19.30* Да Да 2022.2
Да Наборы символов и кодировки P2314R4 10 Да 19.51* Да Да 2022.2
Да forРасширить инициализатор (цикла ), чтобы разрешить alias-declaration P2360R0 12 14 19.50* 14.0.0*
2022.2 Многомерный  оператор индексации (FTM) * P2128R6 12 15 19.42* 14.0.3*
2022.2 Атрибуты на лямбдах P2173R1 9 13 19.44* 13.1.6* 6.6 2022.2
#warning 22.5 P2437R1 Да* Да 19.50* 15.0.0* 6.5 2023.2
Да Удаление некодируемых широких символьных литералов и многознаковых широких символьных литералов P2362R3 13 14 19.51* 15.0.0* 6.7
2023.2 Метки в конце составных операторов P2324R2 13 16 19.51* 16.0.0* 6.5 2023.2
23.9 Разделенные escape-последовательности P2290R3 13 15 19.50* 15.0.0* 6.7
2023.2  Именованные универсальные последовательности символов (FTM) * P2071R2 13 15 19.51* 15.0.0* 6.7
2023.2 constexprСмягчение некоторых   ограничений (FTM) * P2448R2 13
17 (частично)
19 19.51*
2024.0 (частично)  Более простое неявное перемещение (FTM) * P2266R3 13 13 19.50* 6.7
static operator() 2022.2 (FTM) * P1169R4 13 16 19.44* 16.0.0* 6.7
2023.2 Требования для необязательных расширенных типов с плавающей запятой P1467R9 13 Н/Д
6.4 Вывод аргументов шаблона класса из унаследованных конструкторов P2582R1 14
19.51*[[assume]] Атрибут P1774R8 13 19
19.51*Поддержка UTF-8 как переносимой кодировки исходных файлов P2295R6 13* 15*19.0 (Обновление 2)* * 15.0.0*
static operator[] 2023.2 (FTM) * P2589R1 13 16 19.44* 16.0.0* 6.7
2023.2 static constexprРазрешение constexpr переменных в   функциях (FTM) * P2647R1 13 16 19.51* 16.0.0*
2023.2  Продление времени жизни временных объектов в инициализаторе цикла for по диапазону (FTM) *
P2644R1
P2718R0
CWG2659 15 19
19.51*DR11: Изменение области видимости лямбды trailing-return-type
P2036R3
P2579R0 16 17 19.50*
2023.2 DR20: Осмысленные экспорты P2615R1 15 17 (частично)
19.28 (16.8)*constevalDR20:   должен распространяться вверх (FTM) * P2564R3 14 17 19.52* 16.0.0* 6.7
2024.0 DR98: Синтаксис идентификаторов C++ с использованием Unicode Standard Annex 31 P1949R7 12 14 19.50* 14.0.0* 6.4
2022.2 DR11: Разрешить дублирование атрибутов P2156R1 11 13 19.50* 13.1.6* 6.5
23.9 __cpp_concepts DR20: Регулировка значения макроса проверки возможностей P2493R0 12 19.50* 6.4
23.3 DR98: wchar_tСмягчить требования к для соответствия существующей практике P2460R2 Да Да 19.44* 15.0.0* Н/Д
2023.2 DR11: Использование неизвестных указателей и ссылок в константных выражениях P2280R4 14 20 *
19.50* DR20: Оператор равенства, который вы ищете P2468R2 13 16 19.36* 16.0.0*
2023.2 char8_tDR20:   Исправление совместимости и переносимости (FTM) * P2513R4 13 16 19.34* 16.0.0*
2023.2 DR98/11: Уточнение сообщения о диагностических директивахstatic_assert и разрешить не зависящих от значения выражений в контексте шаблона CWG2518 13 17
16.0*
(частично)*
 

19.40*
 

Возможность C++23
Документ(ы)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (бывш. PGI)*
Nvidia nvcc

Cray

Возможности библиотеки C++23

 
Возможность C++23

 
Документ(ы)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang* Библиотека Stacktrace (FTM) *
P0881R7
P2301R1
12 (частично)*
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*Смягчение требований к std::chrono::time_point P2212R2 Н/Д Н/Д Н/Д
Н/ДПредоставление обратной связи по размеру  в интерфейсе аллокатора (FTM) * P0401R6 16 15 19.30*
<14.0.3*>spanstream: строковый поток с std::span -буфером (FTM) * P0448R4 12
19.31*std::out_ptr(),  std::inout_ptr() (FTM) * P1132R8 14 19
constexpr 19.30* type_info::operator==() (FTM) * P1328R1 12 17 19.33*
*
19.34*
15.0.0*Конструкторы итераторной пары для std::stack и  std::queue (FTM) * P1425R4 12 14 19.31*
14.0.3* Контекст без вывода для аллокаторов в руководствах по выводу контейнеров P1518R212 *13 *19.31* *13.1.6*
*ranges::starts_with() и  ranges::ends_with() (FTM) * P1659R3 16
17 (частично)*
18 19.31*
16.0.0*Запрет std::basic_string и std::basic_string_view конструирования из nullptr P2166R1 12 13 19.30*
13.1.6* std::invoke_r() (FTM) * P2136R3 12 17 19.31*
15.0.0*Диапазонный конструктор для std::basic_string_view P1989R2 11 14 19.30*
14.0.3*Аргументы шаблона по умолчанию для std::pair's пересылающего конструктора P1951R1 14 14 19.30*
14.0.3*Удаление сборки мусора и обнаружения утечек на основе достижимости (поддержка библиотеки ) P2186R2 12 14 19.30*
14.0.3*zip: views::zip, views::zip_transform, views::adjacent, и  views::adjacent_transform (FTM) * P2321R2 13
15 (частично)*
22 19.33*(частично)**
*
19.37*
14.0.3* Гетерогенные перегрузки стирания для ассоциативных контейнеров (FTM) * P2077R3 16
19.32* std::byteswap() (FTM) * P1272R4 12 14 19.31*
14.0.3* 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*Монадические операции для  std::optional (FTM) * P0798R8 12 14 19.32*
14.0.3* std::move_only_function (FTM) * P0288R9 12
19.32*Добавить условную спецификацию noexcept к std::exchange P2401R0 12 14 19.31*
14.0.3*Требовать, чтобы & std::spanstd::basic_string_view были TriviallyCopyable P2251R1 Да Да 19.31*
Да Уточнение статуса «заголовков C» P2340R1 Да Да Да
<Да > expected (FTM) *
P0323R12
P2549R1 12 16 19.33*
15.0.0*<constexpr для >cmath< и > cstdlib (FTM) * P0533R9
4.6 (частично)* std::unreachable() (FTM) * P0627R6 12 15 19.32*
14.0.3*Объявление устаревшими std::aligned_storage и std::aligned_union P1413R3 13 16
19.33* & std::reference_constructs_from_temporary std::reference_converts_from_temporary (FTM) * P2255R2
13 (частично)*
14 21 (частично)*
constexpr 19.51* std::unique_ptr (FTM) * P2273R3 12 16 19.33*
15.0.0*Конструирование контейнеров и строк из диапазонов с помощью ranges::to() , тегированных конструкторов, вставки и присваивания функций-членов (FTM) * (FTM) * P1206R7
14 (частично)*
15 17 19.34*
15.0.0*Поддержка конвейера для определённых пользователем адаптеров диапазонов (ranges::range_adaptor_closure, std::bind_back ) (FTM) * (FTM) * P2387R3
13 (частично)*
14 19
19.34*ranges::iota(), ranges::shift_left(), и  ranges::shift_right() (FTM) * (FTM) * P2440R1
13 (частично)*
16 23
19.34* views::join_with (FTM) * P2441R2 13 21
19.34*views::chunk и  views::slide (FTM) * (FTM) * P2442R1 13
19.33* views::chunk_by (FTM) * P2443R1 13 18 19.33*
16.0.0*std::mdspan : невладеющая многомерная ссылка на массив (FTM) *
P0009R18
P2599R2
P2604R0
P2613R1
P2763R1 16
17 (частично)*
18 19.39*
<15.0.0*> flat_map (FTM) * P0429R9 15 20
<19.51*> flat_set (FTM) * P1222R4 15 21
19.51*ranges::find_last(), ranges::find_last_if(), и  ranges::find_last_if_not() (FTM) * P1223R5 13 19
19.36*<Автономная библиотека: лёгкие >utility<, >ranges<, и > iterator P1642R1113 *
19.38* views::stride (FTM) * P1899R3 13 23
19.34*Совместимость между std::tuple  и кортежеподобными объектами (FTM) * P2165R4 14 2.9 (частично)*19.36* (частично)
*
19.37*
частично*views::as_const Исправление константных итераторов, ограничителей и диапазонов. (FTM) * P2278R4 13 19.35*
(частично)*
19.36*Форматирование  диапазонов (FTM) * P2286R8 15 16 19.37*
(частично)*19.39*
(частично)*19.41*
(частично)*
19.42*
15.0.0*Улучшить форматирование контейнера по умолчанию  (FTM)* P2585R1 15 16 (частично)*
17
19.42* 15.0.0*
Библиотека форматированного вывода <print>  (FTM)* P2093R14
P2539R4
14 17 (частично)*
18
19.37* 15.0.0**
16.0.0*
Форматирование std::thread::id и std::stacktrace  (FTM)* P2693R1 14 17 (частично)* 19.38* 15.0.0*
constexpr для целочисленных перегрузок std::to_chars() и std::from_chars()  (FTM)* P2291R3 13 16 19.34* 15.0.0*
ranges::contains() и ranges::contains_subrange()  (FTM)* P2302R4 13 19 19.34* 16.0.0**
Алгоритмы свёртки диапазонов  (FTM)* P2322R6 13 23
18 (частично)*
19.35*
views::cartesian_product  (FTM)* P2374R4
P2540R1
13 19.37*
Добавление поддержки типов только для перемещения для концепций сравнения (equality_comparable, totally_ordered, three_way_comparable)  (FTM)* P2404R3 16 22 19.36*
Итераторы диапазонов как входные данные для алгоритмов не-диапазонов  (FTM)* P2408R5 16 19.34*
constexpr std::bitset  (FTM)* P2417R2 13 16 19.34* 15.0.0*
basic_string::substr() && P2438R2 16 16 19.34* 15.0.0*
views::as_rvalue  (FTM)* P2446R2 13 16 19.34* 15.0.0*
Модули стандартной библиотеки  (FTM)* P2465R3 15* 17 (частично)* 19.35*
(частично)*
19.36*
std::forward_like()  (FTM)* P2445R1 14 16 19.34* 15.0.0*
Поддержка монопольного режима для std::fstream  (FTM)* P2467R1 12 18 19.36* 16.0.0*
views::repeat  (FTM)* P2474R2 13 17 19.36* 15.0.0*
Смягчение адаптеров диапазонов для поддержки типов только для перемещения  (FTM)* P2494R2 14 17 19.34* 15.0.0*
std::basic_string_view диапазонный конструктор должен быть явным P2499R0 12.2 16 19.34* 15.0.0*
std::generator: синхронный корутинный генератор для диапазонов  (FTM)* P2502R2
P2787R0
14 19.43*
Добавить условную спецификацию noexcept к std::apply P2517R1 10 18 19.34* 16.0.0*
Явное управление временем жизни (std::start_lifetime_as)  (FTM)* P2590R2
P2679R2
16 19.51*
Уточнение обработки кодировок в локализованном форматировании типов chrono  (FTM)* P2419R2 15* 19.34**
std::move_iterator не всегда должен быть input_iterator  (FTM)* P2520R0 12.3* 17* 19.34** 15.0.0*
Обновление руководств по выводу для явного параметра объекта операторов вызова LWG3617 14 19.34*
Обновление руководств по выводу для static operator() P1169R4 13 16 19.39* 15.0.0*
Стандартные имена и поддержка библиотеки для расширенных типов с плавающей запятой P1467R9 13 19.37**
Монадические операции для std::expected  (FTM)* P2505R5 13 17 19.36* 15.0.0*
views::enumerate  (FTM)* P2164R9 13 23 19.37*
std::is_implicit_lifetime  (FTM)* P2674R1 16 20 19.51*
std::common_reference_t из std::reference_wrapper должен быть ссылочным типом  (FTM)*  (FTM)* P2655R3 16 21* 19.37*
Запрет пользовательской специализации std::allocator_traits P2652R2 19 19.37*
Объявление устаревшим std::numeric_limits::has_denorm P2614R2 17 18 19.37* 16.0.0*
Делаем многопараметровые конструкторы viewов явными P2711R1 16 21
17 (частично)*
19.36** 15.0.0*
DR20: Смягчение диапазонов чуть-чуть  (FTM)* P2609R3 15 20 19.37*
DR20: Спрятанные итераторы для правильного уплощения P2770R0 14 21
18 (частично)
19.37*
DR17: std::visit() для классов, производных от std::variant  (FTM)* P2162R2 11.3 13 19.20**
19.30*
13.1.6*
DR20: Условно заимствованные диапазоны P2017R1 11 16 19.30*
DR20: Исправление адаптеров входных диапазонов и std::counted_iterator P2259R1 12 19.30*(частично)*
19.31*
DR20: views::join должен объединять все представления диапазонов P2328R1 11.2 15 19.30* 14.0.3*
DR20: view не требует default_initializable  (FTM)* P2325R3 11.3 16 19.30* 15.0.0*
DR20: Объекты адаптеров диапазонов связывают аргументы по значению P2281R1 11 14 19.29 (16.10)*
(частично)*
19.31*
14.0.3*
DR20: constexpr для std::optional и std::variant  (FTM)*  (FTM)* P2231R1 11.3 (частично)*
12
13 (частично)*
19
19.31* 13.1.6* (частично)
DR20: views::lazy_split и переработанный views::split P2210R2 12 16 19.31* 15.0.0*
DR20: Исправление ranges::istream_view P2432R1 12 16 19.31* 15.0.0*
DR20: view с владением  (FTM)* P2415R2 12 14 19.31* 14.0.3*
DR20: Исправление обработки локали в форматировщиках chrono  (FTM)* P2372R3
P2418R2
13 19.31*
DR20: Очистка целочисленных типов классов P2393R1 19.32*
DR20: Проверки строки формата на этапе компиляции; Уменьшение размера двоичного кода семейства std::format()   (FTM)* P2216R3 13 14 (частично)*
15
19.32* 14.0.3*
DR20: Добавление поддержки типов, не форматируемых через const, в std::format P2418R2 13 15 19.32* 14.0.3*
DR20: std::basic_format_string P2508R1 13 15 19.35* 14.0.3*
DR20: Ядовитые пилюли слишком токсичны  (FTM)* P2602R2 14 19 19.36*
DR20: std::format разрешения символа заполнения P2572R1 14 17 19.37*
DR20: Улучшение оценки ширины std::format's P2675R1 14 17 19.38*
DR20: std::barrier гарантии завершения фазы  (FTM)* P2588R3 19.28 (16.8)**
19.36*
 

Возможность C++23
 

Документ(ы)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

* - наведите курсор на ячейку, помеченную звездочкой * чтобы увидеть дополнительные всплывающие заметки.
DRnn - число nn после "DR" обозначает целевую ревизию C++, к которой применяется отчёт об ошибке, например, DR20 → C++20.

Внешние ссылки

1.  C++23 - Википедия