Spec-Zone.ru › C++

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

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

Основные возможности языка 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
staticoperator() (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
staticoperator[] (FTM)* P2589R1 13 16 19.44* 16.0.0* 6.7 2023.2
Разрешение использовать переменные staticconstexpr в функциях 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*
Библиотека трассировки стека (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*
Библиотека для freestanding-среды: простые <utility>, <ranges> и <iterator> P1642R11 13* 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 range должен быть явным 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: Незначительное ослабление ограничений для диапазонов (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: Упрощение типов integer-class P2393R1 19.32*
DR20: Проверки строк формата во время компиляции; уменьшение размера двоичного кода семейства std::format() (FTM)* P2216R3 13 14 (частично)*
15
19.32* 14.0.3*
DR20: Добавление поддержки типов, не являющихся const-formattable, для 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*

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

Spec-Zone.ru

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