C++23
С ru.cppreference.net
< cpp
Текущая редакция стандарта 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иif constexpr(P1401R5) - Сделать порядок объявления в макете (нестатических членов данных класса) обязательным (P1847R4)
- Изменения кодирования текста:
- Наборы символов и кодировки (P2314R4)
- Согласованная кодировка символьных литералов (P2316R2)
- Именованные универсальные последовательности символов, например,
"\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)
- Нелитеральные переменные, метки и
Новые возможности библиотеки
Новые модули
Новые заголовки
Заголовки для совместимости с 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::generator: синхронный корутинный генератор для диапазонов (P2502R2, P2787R0)
Диагностика
- Библиотека Stacktrace (P0881R7
)
- Алгоритмы, итераторы и диапазоны
views::adjacentНовые адаптеры диапазонов:views::adjacent_transformи (P2321R2views::as_const) (P2278R4views::as_rvalue) (P2446R2views::cartesian_product) (P2374R4views::chunk_by) (P2443R1views::chunk) (P2442R1views::enumerate) (P2164R9views::join_with) (P2441R2views::repeat) (P2474R2views::slide) (P2442R1views::stride) (P1899R3views::zip)views::zip_transform, (P2321R2
ranges::range_adaptor_closure): вспомогательный элемент для определённых пользователем замыканий адаптеров диапазонов (P2387R3ranges::to): функция преобразования диапазона (P1206R7- )
ranges::starts_withНовые ограниченные алгоритмы диапазонов:ranges::ends_withи (P1659R3ranges::contains)ranges::contains_subrangeи (P2302R4ranges::find_last)ranges::find_last_if,ranges::find_last_if_not, и (P1223R5ranges::iota)ranges::shift_left,ranges::shift_right, и : версии для диапазонов неограниченных алгоритмов (P2440R1ranges::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, (P1222R4std::flat_map),std::flat_multimap, (P0429R9- ): плоские множества и плоские отображения - адаптеры контейнеров, обёртывающие отсортированные контейнеры произвольного доступа
std::stackРазрешение конструирования итераторной пары вstd::queueи (P1425R4 - )Гетерогенные перегрузки стирания для ассоциативных контейнеров (P2077R2
- )Контекст без вывода для аллокаторов в руководствах по выводу контейнеров (P1518R2
- )
std::spanТребование, чтобыstd::basic_string_viewи были тривиально копируемыми (P2251R1
)
constexprПоддержка времени компиляции- )Метапрограммирование
)
std::out_ptrУправление памятьюstd::inout_ptrи : адаптеры умных указателей для совместимости с C (P1132R7std::allocate_at_least)std::allocator::allocate_at_leastи (P0401R6std::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Форматирование диапазонов, кортежей, экранированного представления символов и строк, , и stacktraces. (P2286R8) (P2585R1) (P2693R1
)
- Ввод/вывод и печать
std::printФункции форматированного выводаstd::printlnи < предоставлены в заголовке >print (P2093R14 spanstream)std::spanбиблиотека (<-строковый поток на основе ) предоставлена в заголовке >spanstream (P0448R4- )
std::fstreamsПоддержка монопольного режима в (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и (P1413R3std::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 - Википедия |