Spec-Zone.ru › C++

C++23

Следующее поколение стандарта C++.

См.: Текущий график разработки C++23 (2023-05-10).

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

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

Новые модули

  • std и std.compat

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

  • <expected>
  • <flat_map>
  • <flat_set>
  • <generator>
  • <mdspan>
  • <print>
  • <spanstream>
  • <stacktrace>
  • <stdfloat>

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

  • <stdatomic.h>

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

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

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

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

Функция C++23

Статья(и)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ для AIX
IBM Open XL C++ для z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Суффикс литерала для (знакового) size_t P0330R8 11 13

13.1.6*

6.5
Сделать () более необязательным для лямбда-функций P1102R2 11 13

13.1.6*

6.3
if consteval P1938R3 12 14

14.0.0*

6.3
Удаление поддержки сборки мусора P2186R2 12 19.30* N/A
Сужение контекстных преобразований в static_assert и constexpr if P1401R5 9 13 (частично)*
14

14.0.0*

Удаление пробелов перед объединением строк P2223R2 Да Да Да
Обязательность порядка объявлений P1847R4 Да Да Да Да
Удаление смешанного объединения широких строковых литералов P2201R1 Да Да Да Да Да Да
Явное параметр объекта (вывод этого) P0847R7 18 19.32*
(частично)*
6.3
auto(x) и auto{x} P0849R8 12 15

14.0.3*

6.4
Изменение области действия лямбды trailing-return-type P2036R3 17
#elifdef и #elifndef P2334R1 12 13

13.1.6*

6.5
Переменные, не являющиеся литералами (и метки и переходы) в constexpr функциях P2242R3 12 15

14.0.3*

6.3
Согласованное кодирование символьных литералов P2316R2 Да Да 19.30* Да Да
Наборы символов и кодировки P2314R4 10 Да Да
Расширение init-statement (for цикла) для поддержки алиасов P2360R0 12 14

14.0.0*

END_OF_DOCUMENT_MARKER
Многомерный оператор индексации массива P2128R6 12 15

14.0.3*

Атрибуты лямбда-функций P2173R1 9 13

13.1.6*

#warning P2437R1 Yes* Yes

15.0.0*

6.5 Yes
Удаление некодируемых символов широкого диапазона и многосимвольных литералов широкого диапазона P2362R3 13 14

15.0.0*

Метки в конце составных операторов P2324R2 13 16 6.5
Ограниченные escape-последовательности P2290R3 13 15

15.0.0*

Именованные универсальные escape-последовательности символов P2071R2 13 15

15.0.0*

Снятие некоторых ограничений constexpr P2448R2 13 17 (частично)
Простой неявный move P2266R3 13 13
static operator() P1169R4 13 16
Требования к необязательным типам расширенных чисел с плавающей точкой P1467R9 13 N/A 6.4
Вывод шаблона класса из унаследованных конструкторов P2582R1 14
Атрибут [[assume]] P1774R8 13
Поддержка UTF-8 в качестве портативного кодирования исходного файла P2295R6 13* 15* 19.0 (Update 2)**

15.0.0*

static operator[] P2589R0 13 16
Разрешение переменных static constexpr в функциях constexpr P2647R1 13 16
Расширение срока жизни временных значений в инициализаторе цикла for с диапазоном P2718R0
DR20: Значимые экспорты P2615R0 17 (частично)
DR20: consteval необходимо распространять вверх P2564R0 14 17
DR: Синтаксис идентификаторов C++ с использованием Приложения 31 к Стандарту Юникода P1949R7 12 14

14.0.0*

6.4
DR11: Разрешить дублирование атрибутов P2156R1 11 13

13.1.6*

6.5
DR20: Настройка значения макроса проверки возможностей __cpp_concepts P2493R0 12 19.32* 6.4
DR98: Снятие требований к wchar_t, чтобы соответствовать существующим практикам P2460R2 Yes Yes

15.0.0*

DR: Использование неизвестных указателей и ссылок в константных выражениях P2280R4 14
DR20: Оператор равенства, который вы ищете P2468R2 13 16
DR20: char8_t Совместимость и исправление проблем переносимости P2513R4 13 16 19.34*
DR: Уточнить отчет о директивах диагностики и разрешить static_assert не зависящих от значения выражений в контексте шаблона CWG2518 13 16.0*
(частично)*


Функции C++23


Статья(и)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ для AIX
IBM Open XL C++ для z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc

Функции библиотеки C++23

Функция C++23

Статья(и)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Sun/Oracle C++*
Embarcadero C++ Builder*
Библиотека отслеживания стека P0881R7
P2301R1
12 (частично)*
14*
19.34*
<stdatomic.h> P0943R6 12 15 19.31*

14.0.3*

std::is_scoped_enum P1048R1 11 12 19.30*

13.0.0*

std::basic_string::contains(), std::basic_string_view::contains() P1679R3 11 12 19.30*

13.0.0*

std::to_underlying P1682R3 11 13 19.30*

13.1.6*

Снятие требований к time_point<>::clock P2212R2 Н/Д Н/Д
Предоставление обратной связи по размеру в интерфейсе аллокатора P0401R6 15 19.30*

14.0.3*

<spanstream>: строковый поток с буфером на основе std::span P0448R4 12 19.31*
std::out_ptr(), std::inout_ptr() P1132R8 14 19.30*
constexpr type_info::operator==() P1328R1 12 17 19.33**
19.34*
Конструкторы пар итераторов для std::stack и std::queue P1425R4 12 14 19.31*

14.0.3*

Невывод контекст для аллокаторов в руководствах по выводу контейнеров P1518R2 12 13 19.31*

13.1.6*

ranges::starts_with() и ranges::ends_with() P1659R3 17 (частично)*
18
19.31*
Запрещение создания std::basic_string и std::basic_string_view из nullptr P2166R1 12 13 19.30*

13.1.6*

std::invoke_r() P2136R3 12 17 19.31*
Конструктор диапазона для std::basic_string_view P1989R2 11 14 19.30*

14.0.3*

Значения по умолчанию для шаблонов std::pair's конструктора пар P1951R1 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 P2321R2 13 15 (частично)* 19.33*(частично)***
19.37*

14.0.3*

Гетерогенные перегрузки стирания для ассоциативных контейнеров P2077R3 19.32*
std::byteswap() P1272R4 12 14 19.31*

14.0.3*

Вывод volatile T* P1147R1 11.3 14 19.31*

14.0.3*

basic_string::resize_and_overwrite() P1072R10 12 14 19.31*

14.0.3*

Моноидные операции для std::optional P0798R8 12 14 19.32*

14.0.3*

std::move_only_function P0288R9 12 19.32*
Добавление условной спецификации noexcept к std::exchange P2401R0 12 14 19.25*

14.0.3*

Требовать, чтобы std::span и std::basic_string_view были TriviallyCopyable P2251R1 Да Да Да Да
Выяснение статуса «заголовков C» P2340R1 Да Да Да Да
<expected> P0323R12
P2549R1
12 16 19.33*

15.0.0*

constexpr для <cmath> и <cstdlib> P0533R9 4.6 (частично)*
std::unreachable() 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 P2255R2 13 (частично)*
constexpr std::unique_ptr P2273R3 12 16 19.33*

15.0.0*

Создание контейнеров и строк из диапазонов с ranges::to(), помеченными конструкторами, методами insert и assign P1206R7 14 (частично)* 17 19.34*
Поддержка пайпов для пользовательских адаптеров диапазонов (ranges::range_adaptor_closure, std::bind_back) P2387R3 13 (частично)* 19.34*
ranges::iota(), ranges::shift_left() и ranges::shift_right() P2440R1 13 (частично)* 19.34*
views::join_with P2441R2 13 19.34*
views::chunk и views::slide P2442R1 13 19.33*
views::chunk_by P2443R1 13 18 19.33*
std::mdspan: ссылка на многомерный массив без владения P0009R18
P2599R2
P2604R0
P2613R1
P2763R1
17 (частично)*
18
19.39 (17.9)*
<flat_map> P0429R9
<flat_set> P1222R4
ranges::find_last(), ranges::find_last_if(), и ranges::find_last_if_not() P1223R5 13 19.36*
Библиотека без поддержки: Простые <utility>, <ranges> и <iterator> P1642R11 13* Не применимо
views::stride P1899R3 13 19.34*
Совместимость между std::tuple и объектами типа tuple P2165R4 2.9 (частично)* 19.36* (частично)*
19.37*
частично*
Исправление постоянных итераторов, стоп-значений и диапазонов P2278R4 13 19.35* (частично)*
19.36*
Форматирование диапазонов P2286R8 16 19.37* (частично)*
19.39 (17.9)*(частично)*
Улучшение форматирования контейнеров по умолчанию P2585R1 16 (частично)*
17
Библиотека форматированного вывода <print> P2093R14
P2539R4
14 17 (частично)*
18
19.37*
Форматирование std::thread::id и std::stacktrace P2693R1 14 17 (частично)* 19.38*
constexpr для целочисленных перегрузок std::to_chars() и std::from_chars(). P2291R3 13 16 19.34*

15.0.0*

ranges::contains() и ranges::contains_subrange() P2302R4 13 19.34*
Алгоритмы fold диапазонов P2322R6 13 19.35*
views::cartesian_product P2374R4
P2540R1
13 19.37*
Добавление поддержки только перемещаемых типов для концепций сравнения (equality_comparable, totally_ordered, three_way_comparable) P2404R3 19.36*
Итераторы диапазонов как входные данные для алгоритмов, не являющихся диапазонами P2408R5 19.34*
constexpr std::bitset P2417R2 13 16 19.34*

15.0.0*

basic_string::substr() && P2438R2 16 19.34*

15.0.0*

views::as_rvalue P2446R2 13 16 19.34*

15.0.0*

Модули стандартной библиотеки P2465R3 17 (частично)* 19.35*
(частично)*
19.36*
std::forward_like() P2445R1 14 16 19.34*

15.0.0*

Поддержка эксклюзивного режима для std::fstream P2467R1 12 18 19.36*
views::repeat P2474R2 13 17 19.36*
Смягчение адаптеров диапазонов для поддержки типов, допускающих только перемещение P2494R2 14 17 19.34*
std::basic_string_view диапазон конструктор должен быть явным P2499R0 12.2 16 19.34*

15.0.0*

std::generator: синхронный генератор корутин для диапазонов P2502R2
P2787R0
14
Добавить условное спецификацию noexcept к std::apply P2517R1 10 19.34*
Явное управление жизненным циклом (std::start_lifetime_as) P2590R2
P2679R2
Прояснить обработку кодировок в локализованном форматировании типов chrono P2419R2 19.34**
std::move_iterator не должно всегда быть input_iterator P2520R0 12.3* 17* 19.34**
Обновление руководств по выводу для операторов вызова функций с явным объектом параметра явного параметра объекта LWG3617 19.34*
Обновление руководств по выводу для static operator() P1169R4 13 16 19.39 (17.9)*

15.0.0*

Стандартные имена и поддержка библиотеки для расширенных типов с плавающей запятой расширенных типов с плавающей запятой P1467R9 13 19.37**
Моноидные операции для std::expected P2505R5 13 17 19.36*
views::enumerate P2164R9 13 19.37*
std::is_implicit_lifetime P2674R1
std::common_reference_t std::reference_wrapper должен быть типом ссылки P2655R3 19.37*
Запрет пользовательской специализации std::allocator_traits P2652R2 19.37*
Устаревание std::numeric_limits::has_denorm P2614R2 18 19.37*
Гарантии завершения фазы std::barrier P2588R3 19.36*
END_OF_DOCUMENT_MARKER
Создание конструкторов с несколькими параметрами для views explicit P2711R1 17 (частично)* 19.36**
Небольшое изменение в диапазонах P2609R3 19.37*
Хранение итераторов для правильного уплощения P2770R0 14 18 19.37*
DR17: std::visit() для классов, производных от std::variant 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 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 P2231R1 11.3 (частично)*
12
13 (частично)* 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*

view со владением P2415R2 12 14 19.31*

14.0.3*

DR20: Исправление обработки локали в форматировщиках chrono P2372R3 13 19.31*
DR20: Улучшение целочисленных типов P2393R1 19.32*
std::format() улучшения P2216R3 13 14 (частично)*
15
19.32*

14.0.3*

DR20: Добавить поддержку типов, не являющихся const-форматируемыми, в std::format P2418R2 13 15 19.32*

14.0.3*

std::basic_format_string P2508R1 13 15 19.35*

14.0.3*

DR20: Ядовитые таблетки слишком токсичны P2602R2 14 19.36*
DR20: Допущения символа заполнения P2572R1 17 19.37*
DR20: Улучшение оценки ширины std::format P2675R1 17 19.38*


Функция C++23


Статья(и)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Sun/Oracle C++*
Embarcadero C++ Builder*

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

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/23

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API