Spec-Zone.ru › C++

C++23

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

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

  • Новые макросы проверки возможностей языка
  • Явный параметр объекта, функции-члены с явным параметром объекта, также известные как «выведение this» (P0847R7)
  • Многомерный оператор индексации (например, v[1, 3, 7] = 42;) (P2128R6)
  • static operator[] (P2589R1), static operator() и статические лямбда-выражения (P1169R4)
  • auto(x) и auto{x}: decay-copy в языке (P0849R8)
  • Предположения с помощью нового атрибута [[assume(expression)]] (P1774R8)
  • Атрибуты у лямбда-выражений (P2173R1)
  • Необязательные расширенные типы с плавающей точкой: std::float{16|32|64|128}_t и std::bfloat16_t (P1467R9)
  • Новые директивы препроцессора: #elifdef, #elifndef (P2334R1) и #warning (P2437R1)
  • Суффикс литерала 'Z'/'z' для литералов типа (signed) std::size_t (P0330R8), например auto ouz = 0uz;
  • Удаление пробельных символов перед склеиванием строк. (P2223R2)
  • Упрощённое неявное перемещение (P2266R3)
  • Продление времени жизни временных объектов в инициализаторе цикла for на основе диапазона (P2718R0)
  • Вывод аргументов шаблона класса (CTAD) для унаследованных конструкторов (P2582R1)
  • Метки в конце составных операторов (P2324R2), например
void f(int& x){if (x)goto END;x = 42;END:}
  • Объявления псевдонимов (using) в начальных инструкциях (P2360R0), например
for (using T = int; T e : v)/* ... */
  • Сделать () более необязательным для лямбда-выражений (P1102R2)
  • Сужающие контекстные преобразования в bool в static_assert и ifconstexpr (P1401R5)
  • Обязательный порядок объявления членов при размещении (нестатических членов данных класса) (P1847R4)
  • Изменения в кодировании текста:
    • Наборы символов и кодировки (P2314R4)
    • Единообразное кодирование символьных литералов (P2316R2)
    • Именованные универсальные escape-последовательности символов, например "\N{CAT FACE}" для "🐱" (P2071R2)
    • Escape-последовательности с разделителями, например "\o{7777}", "\x{C0DE}", "\u{CAFE}" (P2290R3)
    • Поддержка UTF-8 в качестве переносимой кодировки исходных файлов (P2295R6)
  • if consteval / if not consteval (P1938R3)
  • Изменения в constexpr:
    • Переменные, не являющиеся литеральными, метки и операторы goto в функциях constexpr (P2242R3)
    • Разрешение переменных static и thread_local в константных выражениях функций constexpr (P2647R1)
    • Функции constexpr не обязательно иметь литеральный тип возвращаемого значения и типы параметров (P2448R2)
    • Функции constexpr, для которых ни один вызов не удовлетворяет требованиям основного константного выражения (P2448R2)

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

  • Новые макросы проверки возможностей библиотеки

Новые модули

  • std и std.compat (P2465R3)

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

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

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

  • <stdatomic.h> (P0943R6)

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

Общие утилиты
  • 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 (P2718R0)
  • Специализация std::basic_common_reference для std::reference_wrapper, возвращающая ссылочные типы (P2655R3)
Библиотека корутин
  • std::generator: генератор диапазонов на основе синхронных корутин (P2502R2, P2787R0)
Диагностика
  • Библиотека трассировки стека (P0881R7)
Алгоритмы, итераторы и диапазоны
  • Новые адаптеры диапазонов:
    • views::adjacent и views::adjacent_transform (P2321R2)
    • views::as_const (P2278R4)
    • views::as_rvalue (P2446R2)
    • views::cartesian_product (P2374R4)
    • views::chunk_by (P2443R1)
    • views::chunk (P2442R1)
    • views::enumerate (P2164R9)
    • views::join_with (P2441R2)
    • views::repeat (P2474R2)
    • views::slide (P2442R1)
    • views::stride (P1899R3)
    • views::zip, views::zip_transform (P2321R2)
  • ranges::range_adaptor_closure: вспомогательный тип для замыканий адаптеров диапазонов, определённых в программе (P2387R3)
  • ranges::to: функция преобразования диапазона (P1206R7)
  • Новые алгоритмы диапазонов с ограничениями:
    • ranges::starts_with и ranges::ends_with (P1659R3)
    • ranges::contains и ranges::contains_subrange (P2302R4)
    • ranges::find_last, ranges::find_last_if и ranges::find_last_if_not (P1223R5)
    • ranges::iota, ranges::shift_left и ranges::shift_right: версии алгоритмов без ограничений для диапазонов (P2440R1)
    • ranges::fold_left и др.: алгоритмы свёртки диапазонов (P2322R6)
  • Уточнение работы константных итераторов, сентинелов и диапазонов: ranges::cbegin и другие подобные утилиты, возвращающие константные итераторы, должны быть полностью гарантированы даже для представлений с поверхностным const (например, std::span) (P2278R4)
  • Явные многопараметрические конструкторы некоторых представлений (P2711R1)
  • Итераторы диапазонов в качестве входных данных для алгоритмов, не работающих с диапазонами (P2408R5)
  • Ослабление требований к адаптерам диапазонов для поддержки типов, допускающих только перемещение (P2494R2)
Контейнеры
  • std::mdspan: невладеющая ссылка на многомерный массив (P0009R18, P2599R2, P2604R0, P2613R1, P2763R1)
  • Возможность конструирования контейнеров из других совместимых диапазонов и присваивания им значений таких диапазонов (P1206R7)
  • std::flat_set, std::flat_multiset (P1222R4), std::flat_map, std::flat_multimap (P0429R9): плоские множества и отображения — адаптеры контейнеров, оборачивающие базовые отсортированные контейнеры с произвольным доступом
  • Разрешение конструирования из пары итераторов для std::stack и std::queue (P1425R4)
  • Перегрузки стирания с неоднородными типами для ассоциативных контейнеров (P2077R2)
  • Контекст, в котором не производится вывод типа аллокатора, в руководствах по выводу для контейнеров (P1518R2)
  • Требование тривиальной копируемости для std::span и std::basic_string_view (P2251R1)
Поддержка времени компиляции
  • Поддержка constexpr для:
    • std::bitset (P2417R2)
    • std::unique_ptr (P2273R3)
    • std::type_info::operator== (P1328R1)
    • Некоторые функции <cmath> (P0533R9)
    • Целочисленные перегрузки std::to_chars и std::from_chars (P2291R3)
  • Утилиты метапрограммирования:
    • Добавление поддержки типов, допускающих только перемещение, для концептов сравнения (P2404R3)
    • Характеристики типов:
      • std::is_scoped_enum (P1048R1)
      • std::is_implicit_lifetime (P2674R1)
      • std::reference_constructs_from_temporary и std::reference_converts_from_temporary (P2255R2)
Управление памятью
  • std::out_ptr и std::inout_ptr: адаптеры умных указателей для взаимодействия с C (P1132R7)
  • std::allocate_at_least и std::allocator::allocate_at_least (P0401R6)
  • std::start_lifetime_as: функция явного управления временем жизни для типов с неявным временем жизни (P2590R2)
  • Запрет пользовательской специализации std::allocator_traits (P2652R2)
Обработка строк и текста
  • Новые функции-члены и изменения типов строк:
    • 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 и трассировок стека. (P2286R8) (P2585R1) (P2693R1)
Ввод-вывод и вывод на печать
  • Функции форматированного вывода std::print и std::println, предоставляемые в заголовке <print> (P2093R14)
  • Библиотека spanstream (строковый поток на основе std::span), предоставляемая в заголовке <spanstream> (P0448R4)
  • Поддержка эксклюзивного режима в std::fstream (P2467R1)
  • Поддержка вывода volatile T*: std::basic_ostream::operator<<(const volatile void*) (P1147R1)

Устаревшие возможности

Удалённые возможности
  • Поддержка сборки мусора и обнаружение утечек на основе достижимости. (P2186R2)
  • Поддержка конкатенации смешанных широких строковых литералов; например, const auto* no = u"q" U"p" является некорректной программой. (P2201R1)
  • Широкие символьные литералы, не поддающиеся кодированию, и широкие символьные литералы из нескольких символов; например, wchar_t x = 'db' является некорректной программой. (P2362R3)
Устаревшие возможности
  • std::aligned_storage и std::aligned_union (P1413R3)
  • std::numeric_limits::has_denorm (P2614R2)
Отменённое устаревание
  • operator, (оператор-запятая) в выражениях индексации (при этом семантика изменена для поддержки перегружаемого многомерного operator[]).
  • Некоторые заголовки C (соответствующие заголовки <*.h> для совместимости с 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* Да 6.8 2022.2 Да
Удаление конкатенации смешанных широких строковых литералов P2201R1 Да Да 19.44* Да Да Да Да
Функции-члены с явным объектом (выведение this) (FTM)* P0847R7 14 18
19*
19.32*
(частично)*
19.43*
6.3 22.5
auto(x) и auto{x} (FTM)* P0849R8 12 15 19.50* 14.0.3* 6.4 2022.2 23.3
#elifdef и #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 Да
Расширение init-выражения (цикла for), позволяющее использовать объявление псевдонима P2360R0 12 14 19.50* 14.0.0* 6.8 2022.2
Многомерный оператор индексирования (FTM)* P2128R6 12 15 19.42* 14.0.3* 6.8 2022.2
Атрибуты лямбд P2173R1 9 13 19.44* 13.1.6* 6.6 2022.2 22.5
#warning 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
Именованные универсальные escape-последовательности символов (FTM)* P2071R2 13 15 19.51* 15.0.0* 6.7 2023.2
Смягчение некоторых ограничений constexpr (FTM)* P2448R2 13 17 (частично)
19
19.51* 6.9 2024.0 (частично)
Упрощенное неявное перемещение (FTM)* P2266R3 13 13 19.50* 6.7 2022.2
static operator() (FTM)* P1169R4 13 16 19.44* 16.0.0* 6.7 2023.2
Требования к необязательным расширенным типам с плавающей запятой P1467R9 13 Н/Д 6.4
Выведение аргументов шаблона класса из унаследованных конструкторов P2582R1 14 19.51* 6.9
Атрибут [[assume]] P1774R8 13 19 19.51* 6.8
Поддержка UTF-8 в качестве переносимой кодировки исходных файлов 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
Разрешение статических переменных constexpr в функциях constexpr (FTM)* P2647R1 13 16 19.51* 16.0.0* 6.8 2023.2
Продление времени жизни временных объектов в инициализаторе цикла for на основе диапазона (FTM)* P2644R1
P2718R0
CWG2659
15 19 19.51* 6.8
DR11: Изменение области видимости типа возвращаемого значения в завершающей части лямбда-выражения P2036R3
P2579R0
16 17 19.50* 6.8 2023.2
DR20: Осмысленные экспорты P2615R1 15 17 (частично) 19.28 (16.8)*
DR20: consteval должен распространяться вверх (FTM)* P2564R3 14 17 19.52* 16.0.0* 6.7 2024.0
DR98: Синтаксис идентификаторов C++ с использованием приложения 31 к стандарту Unicode 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
DR20: Корректировка значения макроса проверки возможностей __cpp_concepts 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
DR20: Исправление совместимости и переносимости char8_t (FTM)* P2513R4 13 16 19.34* 16.0.0* 6.8 2023.2
DR98/11: Уточнение диагностики директив диагностики и разрешение static_assert для выражений, не зависящих от значения, в контексте шаблона CWG2518 13 17 16.0*
(частично)*
19.40*
6.7


возможность 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*
Ослабление требований к time_point<>::clock P2212R2 Н/Д Н/Д Н/Д Н/Д
Предоставление сведений о размере в интерфейсе Allocator (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 19.30*
constexpr 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*
Контекст, не участвующий в выводе типов, для аллокаторов в руководствах по выводу типов контейнеров P1518R2 12* 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 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::span и std::basic_string_view были тривиально копируемыми 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 (частично)* 19.51*
constexpr std::unique_ptr (FTM)* P2273R3 12 16 19.33* 15.0.0*
Создание контейнеров и строк из диапазонов с помощью ranges::to(), конструкторов с тегами, функций-членов insert и assign (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> P1642R11 13* 19.38*
views::stride (FTM)* P1899R3 13 23 19.34*
Совместимость между std::tuple и 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*
Итераторы ranges как входные данные для алгоритмов без ranges (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*
Многопараметрические конструкторы views сделать explicit P2711R1 16 21
17 (частично)*
19.36** 15.0.0*
DR20: немного ослабляем ограничения Ranges (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.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 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 — Википедия

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

Spec-Zone.ru

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