Namespaces
Variants

Compiler support for C++23

From cppreference.net

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

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

Функциональность C++23

Документ(ы)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Суффикс литерала для (знакового) size_t ( FTM ) * P0330R8 11 13 19.43* 13.1.6* 6.5 2022.2 23.9
Сделать () более опциональным для 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
Удаление поддержки сборки мусора P2186R2 12 N/A 19.30* N/A N/A
Сужение контекстных преобразований в static_assert и constexpr if P1401R5 9 13 (частично)*
14
14.0.0* 2022.2 20.7
Удаление пробелов перед сращиванием строк P2223R2 Да Да Да 6.7 2022.2 Да
Сделать порядок объявлений обязательным для размещения P1847R4 Да Да Да Да 2022.2 Да
Удаление смешанной конкатенации широких строковых литералов concatenation P2201R1 Да Да Да Да Да Да Да
Функции-члены с явным объектом (выведение this )  ( FTM ) * P0847R7 14 18
19*
19.32*
(частично)*
19.43*
6.3 22.5
auto(x) и auto{x} ( FTM ) * P0849R8 12 15 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 Да Да Да 2022.2 Да
Расширить инициализирующее-выражение (в for цикле ) для разрешения объявления-псевдонима P2360R0 12 14 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 22.5
#warning P2437R1 Да* Да 15.0.0* 6.5 2023.2 Да
Удаление некодируемых литералов широких символов и многобайтовых литералов широких символов P2362R3 13 14 15.0.0* 6.7 2023.2
Метки в конце составных операторов P2324R2 13 16 16.0.0* 6.5 2023.2 23.9
Разделенные escape-последовательности P2290R3 13 15 15.0.0* 6.7 2023.2
Именованные универсальные символьные escape-последовательности ( FTM ) * P2071R2 13 15 15.0.0* 6.7 2023.2
Ослабление некоторых constexpr ограничений ( FTM ) * P2448R2 13 17 (частично)
19
2024.0 (частично)
Упрощённый неявный перенос  ( FTM ) * P2266R3 13 13 6.7 2022.2
static operator ( ) ( FTM ) * P1169R4 13 16 19.44* 16.0.0* 6.7 2023.2
Требования для опциональных extended floating-point types P1467R9 13 N/A 6.4
Вывод аргументов шаблона класса из унаследованных конструкторов P2582R1 14
Атрибут [[ assume ]] P1774R8 13 19
Поддержка 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
Разрешение static constexpr переменных в constexpr функциях  ( FTM ) * P2647R1 13 16 16.0.0* 2023.2
Расширение времени жизни временных объектов в инициализаторе range-based for цикла  ( FTM ) * P2644R1
P2718R0
CWG2659
15 19
Объявления и где их найти P1787R6
DR11: Изменение области действия lambda trailing-return-type P2036R3
P2579R0
17 2023.2
DR20: Осмысленные экспорты P2615R1 15 17 (частично)
DR20: consteval должен распространяться вверх  ( FTM ) * P2564R3 14 17 16.0.0* 6.7 2024.0
DR98: Синтаксис идентификаторов C++ с использованием стандарта Unicode Annex 31 P1949R7 12 14 14.0.0* 6.4 2022.2
DR11: Разрешить дублирование атрибутов P2156R1 11 13 13.1.6* 6.5 23.9
DR20: Корректировка значения макроса тестирования возможностей __cpp_concepts P2493R0 12 19.32* 6.4 23.3
DR98: Ослабление требований к wchar_t для соответствия существующей практике P2460R2 Да Да Да 15.0.0* Н/П 2023.2
DR11: Использование неизвестных указателей и ссылок в константных выражениях P2280R4 14 20 *
DR20: Оператор равенства, который вы ищете P2468R2 13 16 16.0.0* 2023.2
DR20: char8_t Исправление совместимости и портируемости  ( 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++ (ex PGI)*
Nvidia nvcc
Cray

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

**Примечание:** В данном фрагменте HTML не содержится переводимого текста, за исключением технических терминов C++ и идентификаторов, которые согласно инструкциям не подлежат переводу. Все HTML-теги, атрибуты и содержимое тегов ` `, ` `, `
`, `` сохранены в оригинальном виде.
**Примечание:** В данном HTML-фрагменте не содержится переводимого текста, так как: - Все элементы внутри тегов ` `, ` ` и ` ` содержат технические термины C++ (`std::byteswap()`, `__cpp_lib_byteswap`), которые не подлежат переводу - Остальной текст представляет собой коды версий, идентификаторы предложений (P1272R4) и аббревиатуры (FTM) - HTML-атрибуты и теги сохранены без изменений **Примечание:** В данном HTML-фрагменте нет текста для перевода на русский язык, так как: - Все HTML-теги и атрибуты должны оставаться без изменений - Текст внутри тегов ` ` содержит C++ специфичные термины (`views::join_with`), которые не подлежат переводу - Остальной текст состоит из технических обозначений (FTM, P2441R2) и номеров версий, которые также не переводятся - Атрибуты `title` содержат техническую документацию на английском языке **Примечание:** В данном фрагменте HTML не содержится переводимого текста, требующего перевода на русский язык. Все элементы представляют собой: - HTML-теги и атрибуты - Технические идентификаторы (`cpp_lib_flat_map_202207L`) - Названия заголовков C++ (` `) - Макросы тестирования возможностей (`__cpp_lib_flat_map`) - Коды предложений стандарта (`P0429R9`) - Числовые значения версий компиляторов Все эти элементы должны оставаться без изменений согласно указанным требованиям. **Примечание:** В данном HTML-фрагменте отсутствует переводимый текст - все содержимое состоит из: - HTML тегов и атрибутов (не подлежат переводу) - C++ специфических терминов (`basic_string::substr()` - не переводится) - Кодов внутри ` ` и ` ` тегов (не переводятся) - Чисел и версий (16, 19.34*, 15.0.0*) - Идентификаторов предложений (P2438R2) Поэтому перевод не требуется, исходный код остается без изменений. **Примечание:** В данном HTML-фрагменте не содержится переводимого текста, так как: - Все HTML-теги и атрибуты должны оставаться без изменений - Текст внутри тегов ` ` содержит C++ специфичные термины (`std::forward_like()`), которые не переводятся - Остальной текст состоит из технических обозначений (FTM, P2445R1), номеров версий и макросов, которые не подлежат переводу **Примечание:** В данном фрагменте HTML отсутствует текст для перевода, требующий локализации на русский язык. Все элементы содержат либо технические идентификаторы, названия функций C++ (`views::repeat`), макросы тестирования (`FTM`), номера предложений (`P2474R2`), версии компиляторов, либо являются чисто числовыми значениями и HTML-атрибутами, которые согласно инструкциям не подлежат переводу. **Перевод текста на веб-странице:** **Примечания:** - HTML-теги и атрибуты сохранены без изменений - Текст внутри тегов ` ` не переведен (C++ специфические термины) - Заголовки ссылок (title) переведены профессионально - Макрос `__cpp_lib_ranges_enumerate` и номер предложения `P2164R9` оставлены без перевода - Форматирование и структура таблицы полностью сохранены **Примечание:** В данном HTML-фрагменте нет текста для перевода на русский язык, так как: - Все текстовые элементы содержат технические обозначения (DR20, P2508R1) - Числовые значения версий (13, 15, 19.35*, 14.0.3*) - C++ специфичные термины (`std::basic_format_string`) - HTML теги и атрибуты сохранены без изменений Форматирование полностью сохранено в соответствии с требованиями.
Функция 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 N/A N/A N/A N/A
Предоставление обратной связи о размере в интерфейсе Allocator  ( FTM ) * P0401R6 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 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*
Конструктор диапазона constructor для 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 (частично)* 19.33* (частично)* * *
19.37*
14.0.3*
Перегрузки гетерогенного удаления для ассоциативных контейнеров  ( FTM ) * P2077R3 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.25* 14.0.3*
Требовать, чтобы std::span и std::basic_string_view были TriviallyCopyable P2251R1 Да Да Да Да
Уточнение статуса «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 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 (частично)* 19.34*
views::join_with ( FTM ) * P2441R2 13 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
17 (частично)*
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() , и ranges::find_last_if_not() ( FTM ) * P1223R5 13 19 19.36*
Автономная библиотека: Легкий уровень <utility> , <ranges> , и <iterator> P1642R11 13 * N/A
views::stride ( FTM ) * P1899R3 13 19.34*
Совместимость между std::tuple и tuple-like объектами  ( FTM ) * P2165R4 14 2.9 (частично)* 19.36* (частично) *
19.37*
частично*
Исправление константных итераторов, стражей и диапазонов. views:: as_const ( FTM ) * P2278R4 13 19.35* (частично)*
19.36*
Форматирование Диапазонов  ( FTM ) * P2286R8 15 (частично)*
15.2
16 19.37* (частично)*
19.39* (частично)*
19.41* (частично)*
19.42*
15.0.0*
Улучшить форматирование контейнеров по умолчанию formatting ( 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 18 (частично)*
19
19.34* 16.0.0* *
Алгоритмы свертки диапазонов ( FTM ) * P2322R6 13 19.35*
views::cartesian_product ( FTM ) * P2374R4
P2540R1
13 19.37*
Добавление поддержки move-only типов для концепций сравнения ( equality_comparable , totally_ordered , three_way_comparable )  ( FTM ) * P2404R3 19.36*
Итераторы диапазонов в качестве входных данных для алгоритмов, не работающих с диапазонами  ( 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*
Модули стандартной библиотеки  ( 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 конструктор диапазона constructor должен быть explicit 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
Уточнение обработки кодировок при локализованном форматировании типов 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 19.37*
views::enumerate ( FTM ) * P2164R9 13 19.37*
std::is_implicit_lifetime ( FTM ) * P2674R1 20
std::common_reference_t для std::reference_wrapper должен быть ссылочным типом  ( FTM ) * ( FTM ) * P2655R3 19.37*
Запрет пользовательской специализации std::allocator_traits P2652R2 19 19.37*
Устаревание std::numeric_limits::has_denorm P2614R2 18 19.37* 16.0.0*
Создание многопараметрических конструкторов для view s explicit P2711R1 17 (частично)* 19.36* * 15.0.0*
DR20: Ослабление Ranges Совсем Немного  ( FTM ) * P2609R3 15 20 19.37*
DR20: Сохранение итераторов с кэшированием для корректного выравнивания P2770R0 14 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: Добавление поддержки неконстантных форматируемых типов в 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*