Spec-Zone.ru › C++

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

Эта страница поддерживается по мере возможностей и может отставать от последних выпусков компиляторов. Если вы заметили устаревшую информацию, пожалуйста, помогите нам, обновив её!


В следующих таблицах представлена поддержка новых возможностей C++ компиляторами. Они включают принятые ревизии стандарта, а также различные технические спецификации:

  • Базовые возможности языка C++29/2d
  • Возможности библиотеки C++29/2d
  • Базовые возможности языка C++26/2c
  • Возможности библиотеки C++26/2c
  • Базовые возможности языка C++23
  • Возможности библиотеки C++23
  • Базовые возможности языка C++20
  • Возможности библиотеки C++20
  • Более старые стандарты
  • Списки совместимости поставщиков

Примечания

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

Возможности C++29

Обратите внимание, что этот список может измениться по мере развития проекта стандарта C++29/2d.

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

Возможность C++29

Документ(ы)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (бывш. PGI)*
Nvidia nvcc
Cray
Параметр смещения #embed (FTM)* P3540R3 17
Контракты для виртуальных функций (FTM)* P3097R3
Индексация пакетов для шаблонов (FTM)* P3670R4
Именованные инициализаторы для базовых классов (FTM)* P2287R6 17
Функции освобождения памяти со спецификацией выбрасываемых исключений являются некорректными (ill-formed) P3424R2 17
Условные спецификаторы noexcept в составных требованиях (FTM)* P3822R2
Использование = default для функций операторов постфиксного инкремента и декремента P3668R4
Добавление ограничений для функций оператора присваивания, объявленных как defaulted P2953R5 17
DR26: Значения, предназначенные только для consteval (FTM)* P4101R1
DR23: Разрешение вымышленных имён и сокращений в именованных универсальных экранированных символах P3733R1 17
DR20: Отмена взаимного исключения для функций возврата promise сопрограмм (FTM)* P3950R1
DR: Корректировка идентификаторов в соответствии с новыми рекомендациями Unicode P3658R1 17
DR: Явный захват лямбды объявляется и инициализируется в лексическом порядке P3847R1 Да 3.1
DR: Разрешение связывания языка C для шаблонов P2243R0
DR: Уточнение поведения переполнения с плавающей запятой P3899R3 12
DR: Недетерминированное происхождение указателей (pointer provenance) P2434R5
DR: Устранение зануления при завершении времени жизни указателя (lifetime-end zap) для atomic и volatile обращений P2414R12
DR: Определение операций загрузки и сохранения для недействительных указателей P3347R6


Возможность C++29


Документ(ы)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (бывш. PGI)*
Nvidia nvcc
Cray

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

Возможность C++29

Документ(ы)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
Улучшенная функция поиска для ассоциативных контейнеров (map) (FTM)* P3091R6
Тегирование указателей (FTM)* P3125R6
Атрибуты потоков (FTM)* P2019R9
Пакеты hazard pointer (FTM)* P3428R4
<bit>: перестановки битов (FTM)* P3104R6
<simd>: перестановки битов (FTM)* P3772R2
<bit>, <simd>: std::shl и std::shr (FTM)* (FTM)* P3793R2
Операции копирования и заполнения std::mdspan (FTM)* P3242R4
std::simd::iota (FTM)* P3319R6
std::expected::has_error() (FTM)* P3798R1
view_interface::at() (FTM)* P3052R2
std::formatter<std::error_code> P3395R6
Исправление представления с плавающей запятой по умолчанию в std::to_chars (FTM)* P3505R4
Требование std::intptr_t и std::uintptr_t P3248R5
Объявление устаревшими знаковых символьных типов в потоках ввода-вывода P3154R3
DR26: Отмена поддержки строковых литералов в std::constant_wrapper (FTM)* P4206R0 17


Возможность C++29


Документ(ы)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

Возможности C++26

Обратите внимание, что этот список может измениться по мере развития проекта стандарта C++26/2c.

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

Возможность C++26

Документ(ы)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (бывш. PGI)*
Nvidia nvcc
Cray
DR98: Удаление неопределённого поведения из лексического анализа P2621R3 Да 3.3 16.0.0*
DR98: Запрет некодируемых строковых литералов (ill-formed) P1854R4 14 14 16.0.0*
Невычисляемые строки P2361R6 14 17 (частично)*
18
16.0.0*
Добавление @, $ и ` в базовый набор символов P2558R2 15 Да 16.0.0*
Constexpr-приведение из void* (FTM)* P2738R1 14 17
DR20: Об игнорируемости стандартных атрибутов P2552R3 15 Да
DR11: Статическая память для инициализаторов в фигурных скобках P2752R3 14
Пользовательские сообщения static_assert (FTM)* P2741R3 14 17
Безымянные переменные-заполнители (FTM)* P2169R4 14 18
Индексация пакетов параметров (FTM)* P2662R3 15 19 6.9
Удаление устаревшего арифметического преобразования для перечислений P2864R2 14 18
DR11/20: Инициализация параметров шаблона P2308R1 9 18
Запрет привязки возвращаемой ссылки к временному объекту P2748R5 14 19
Атрибуты для структурированных связываний (FTM)* P0609R3 15 19
Ошибочное поведение для неинициализированного чтения, атрибут [[indeterminate]] P2795R5
P3684R1
16 6.8 (частично)
= delete("reason"); (FTM)* P2573R2 15 19
Вариативные friend-объявления (FTM)* P2893R3 15 20
DR98: Уточнение правил пропуска фигурных скобок при агрегатной инициализации P3106R1 Да 17
DR20: Запрет объявления модулей через макросы P3034R1 15
DR11: Тривиальные бесконечные циклы не являются неопределённым поведением P2809R3 14 19
Constexpr placement new (FTM)* P2747R2 15 20
Объявление структурированного связывания в качестве условия (FTM)* P0963R3 15 6 (частично)*
21
Упорядочение ограничений, содержащих выражения свёртки (FTM)* P2963R3 19
Удаление указателя на неполный тип должно быть ошибочным (ill-formed) P3144R2 15 19 6.7
Структурированные связывания могут вводить пакет параметров (FTM)* P1061R10 16 21 6.9
Constexpr структурированные связывания и ссылки на constexpr-переменные P2686R5 16* 22 (частично)* 6.7
Constexpr-исключения (FTM)* P3068R6 16
Оксфордская запятая в вариативных макросах P3176R1 15 20
Удаление устаревшего сравнения массивов P2865R6 15 20
#embed (FTM)* P1967R14 15 19* 6.8
Параметры шаблонов в виде концептов и шаблонов переменных (FTM)* P2841R7 22 (частично)*
Тривиальные объединения (FTM)* P3074R7
P3726R2
Наблюдаемые контрольные точки P1494R5 16
Контракты (FTM)* P2900R14 16
Рефлексия (FTM)* P2996R13
P3096R12
P3293R3
P3394R4
P3795R2
16*
Инструкции расширения (FTM)* P1306R5 16
Constexpr виртуальное наследование (FTM)* P3533R2 16
Диагностика ошибок препроцессора P2843R3 16
Разрешение присоединения main к глобальному модулю P3618R0 16
DR20: Разрешение #line перед объявлениями модулей P3868R1
DR17: Вывод аргументов шаблона класса для параметров-шаблонов типов P3865R3 6.9
Константификация выражений сращивания (splice) в утверждениях контрактов P3598R0


Возможность C++26


Документ(ы)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (бывш. PGI)*
Nvidia nvcc
Cray

Возможности стандартной библиотеки C++26

Возможность C++26

Документ(ы)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
Проверка успешного или неуспешного завершения функций <charconv> (FTM)* P2497R0 14 18 16.0.0*
std::text_encoding: идентификация кодировок текста (FTM)* P1885R12
P2862R1
14
Арифметические перегрузки std::to_string и std::to_wstring используют std::format (FTM)* P2587R3 14
Проверка типов аргументов форматирования (FTM)* P2757R3 15
Форматирование указателей (FTM)* P2510R3 14* 17* 19.40**
Поддержка хеширования для классов значений std::chrono (FTM)* P2592R3 16
<rcu>: Read-Copy Update (FTM)* P2545R4
<hazard_pointer>: Hazard Pointers (FTM)* P2530R3
ADL-защищённый std::projected P2538R1 14* 18* 19.38** 16.0.0*
Constexpr устойчивая сортировка (FTM)* P2562R1 15 21
Функция-член std::basic_format_arg::visit() (FTM)* P2637R3 15 19
Функция-член std::variant::visit() (FTM)* P2637R3 15 18
std::is_within_lifetime (FTM)* P2641R4
P3450R1
22 (partial)*
Расширение ассоциативных контейнеров оставшимися гетерогенными перегрузками (FTM)* P2363R5 16
Разрешение использования std::weak_ptr в качестве ключей в неупорядоченных ассоциативных контейнерах (FTM)* P1901R2 16
Собственные дескрипторы (native handles) в файловых потоках (FTM)* P1759R6 14 18 16.0.0*
Взаимодействие строковых потоков с std::string_view (FTM)* P2495R3 16 19
Взаимодействие std::bitset с std::string_view (FTM)* P2697R1 16 18 16.0.0*
Больше constexpr для <cmath> и <complex> (FTM)* (FTM)* P1383R2 4.6 (partial)*
Добавление новых приставок СИ 2022 года для ratios: std::quecto, std::ronto, std::ronna и std::quetta (FTM)* P2734R0 14 17*
std::function_ref: вызываемая ссылка со стиранием типа (FTM)* P0792R14
P3961R1
16 24
std::copyable_function (FTM)* P2548R6 16
std::bind_front, std::bind_back и std::not_fn для NTTP вызываемых объектов
(FTM)* (FTM)* (FTM)*
P2714R1 16
std::submdspan() (FTM)* P2630R4
P3355R1
P3663R3
P3982R2
16
Автономный (freestanding) язык: необязательный ::operator new P2013R5 19.38*
Автономные std::char_traits, std::errc и средства в: <charconv>, <cstdlib>, <cstring>, <cwchar> (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* P2338R4 19.38*
Больше автономных (freestanding) средств
(FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*
P2198R7 19.38*
Арифметика с насыщением (FTM)* P0543R3
P4052R0
14
16*
18 16.0.0*
<debugging>: Поддержка отладки (FTM)* P2546R5
P2810R4
16*
<linalg>: Интерфейс линейной алгебры на основе свободных функций, основанный на BLAS (FTM)* P1673R13
P3050R2
P3222R0
P3371R5
Обеспечение большего удобства использования макроса assert() P2264R7 Да*
Динамические строки форматирования (FTM)* P2918R2
P3953R3
14*
16*
18 16.0.0*
std::span::at() (FTM)* P2821R5 14 18 16.0.0*
Добавлен протокол tuple для std::complex (FTM)* P2819R2 15 19
Новая спецификация для std::generate_canonical P0952R2 16 19.42*
Удаление устаревшего typedef std::allocator::is_always_equal P2868R3 15 18 16.0.0*
Удаление перегрузки функции std::basic_string::reserve(), не принимающей аргументов P2870R3 18 16.0.0*
Удаление устаревших фасетов преобразования Юникода (<codecvt>) P2871R3 18 16.0.0*
Автономная среда: удаление std::strtok (FTM)* P2937R0 14 19.40*
Автономная библиотека (Freestanding): частичные классы (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* P2407R5 14 19.42*
Автономная библиотека (Freestanding): std::inout, std::expected, std::span
(FTM)* (FTM)* (FTM)* (FTM)*
P2833R2 14 19.42*
DR23: std::basic_const_iterator должен следовать правилам преобразования своего базового типа (FTM)* P2836R1
P2950R0
14 19.40*
DR20: std::make_format_args теперь принимает только lvalue-ссылки вместо универсальных ссылок (forwarding references) P2905R2 14 18 19.40* 16.0.0*
DR20: Исправление форматирования единиц кода как целых чисел (FTM)* P2909R4 13.3 18 19.40* 16.0.0*
views::concat (FTM)* P2542R8 15
Конкатенация строк и строковых представлений (FTM)* P2591R5 15 19
Включение инициализации списком для алгоритмов (FTM)* P2248R8
P3217R0
P3787R2
15
std::ranges::generate_random (FTM)* P1068R11
Сравнения для std::reference_wrapper, и ограничения для сравнений std::pair, std::tuple, std::optional и std::variant (FTM)* (FTM)* P2944R3 14 22
19 (частично)*
Макеты mdspan с заполнением (FTM)* P2642R6 16
Новый CTAD для std::span и std::mdspan с целочисленными константами P3029R1 16 19
Атомарный максимум и минимум (FTM)* P0493R5 16
std::formatter<std::filesystem::path> (FTM)* P2845R8 16
Вывод пустых строк с помощью std::println() (FTM)* P3142R0 14* 19* 19.41**
Отмена устаревания std::polymorphic_allocator::destroy P2875R4 14.3* 15 19.41*
Удаление устаревших strstream P2867R2 19
Удаление устаревших API атомарного доступа для std::shared_ptr P2869R4
Удаление std::wstring_convert P2872R3 19
DR23: Разрешение эффективной реализации std::print (FTM)* P3107R5
P3235R3
16 19.43*
Constexpr размещающий new (FTM)* P2747R2 15 20
Библиотека управления выполнением (FTM)* P2300R10
P3388R3
P3396R1
P3433R1
P3481R5
P3570R2
P3682R0
P3887R1
Дополнительные исправления библиотеки управления выполнением P3373R4
P3826R5
P3986R1
P4154R0
P4159R0
std::inplace_vector: динамически изменяемый вектор фиксированной вместимости (FTM)* P0843R14
P3981R2
P4022R0
16
std::philox_engine: генератор случайных чисел на основе счётчика (FTM)* P2075R6 16
Поддержка диапазонов для std::optional (FTM)* P3168R2
P3913R1
16 22 (частично)*
std::is_virtual_base_of: признак типа для обнаружения виртуальных базовых классов (FTM)* P2985R0 15 20
std::dims для std::mdspan (FTM)* P2389R2 16 19
DR11: Формальная спецификация типа std::ignore P2968R2 15 19 19.42*
DR20: Удаление требования к общей ссылке из концептов косвенно вызываемых объектов (FTM)* P2997R1 15 19 19.42*
Объявление устаревшими std::is_trivial и std::is_trivial_v P3247R2 15 21
DR20: Функциональные объекты алгоритмов P3136R1 Да Да 19.39* Да
std::ranges::cache_latest_view (FTM)* P3138R5 15
Ограничение операторов равенства для std::expected (FTM)* P3379R0 15 22
std::aligned_accessor: аксессор std::mdspan, выражающий чрезмерное выравнивание указателя (FTM)* P2897R7 16
std::is_sufficiently_aligned: проверяет предусловие выравнивания указателя (FTM)* P2897R7 16
std::atomic_ref::address() (FTM)* P2835R7
P3936R1
16 (частично)* 22 (частично)*
DR11/20: cv-квалифицированные типы в std::atomic и std::atomic_ref P3323R1 16 19.44*
Constexpr std::atomic и std::atomic_ref (FTM)* P3309R3
Constexpr специализированные алгоритмы работы с памятью (FTM)* P3508R0
P3369R0
15
<stdbit.h> и <stdckdint.h> (FTM)* (FTM)* P3370R1 15*
16
<simd>: типы параллельной обработки данных (FTM)* P1928R15
P3430R3
P2876R3
P3691R1
P3922R1
P3690R1
P3932R0
P4012R1
16 (частично)*
Математические операции SIMD P1928R15
P3844R4
Утилита для создания сред выполнения P3325R5
Constexpr-типы исключений, например std::bad_alloc, std::bad_cast и т. д. (FTM)* P3068R6
P3378R2
P3842R2
16
std::simd::chunk P3441R2 16
Битовые операции SIMD (FTM)* P2933R4
Поддержка перемежающихся значений std::complex в std::simd (FTM)* P2663R7
Обезвреживание и объявление устаревшим std::memory_order::consume P3475R1
Помещение std::monostate в <utility> P0472R3 15 21 19.50*
std::indirect (FTM)* P3019R14 16
std::polymorphic (FTM)* P3019R14 16
Больше constexpr-контейнеров и адаптеров
(FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*
P3372R3 16 (частично)* 21 (частично)*
22 (частично)*
Constexpr std::inplace_vector для нетривиальных типов (FTM)* P3074R7
std::ranges::as_input_view (FTM)* P3137R3
P3828R1
15*
16*
std::ranges::approximately_sized_range и std::ranges::reserve_hint (FTM)* P2846R6
<hive>: Контейнер на основе блоков, повторно использующий ячейки памяти удалённых элементов (FTM)* P0447R28
Библиотечная поддержка наблюдаемых контрольных точек (FTM)* P1494R5
P3641R0
16
<contracts>: Поддержка обработки нарушений контрактов (FTM)* P2900R14
P3819R0
16
Усиление безопасности стандартной библиотеки P3471R4
P3697R1
P3878R1
15 (частично)* 19.44* (частично)* 19.50* (частично)*
Автономная библиотека: <algorithm>, <execution>, <memory>, <numeric>
и <random> (FTM)* (FTM)* (FTM)* (FTM)* (FTM)*
P2976R1
DR20: Преобразование непрерывных итераторов в указатели P3349R0 15 19.51*
<meta>: Поддержка библиотеки рефлексии (FTM)* P2996R13
P3394R4
P3293R3
P3096R12
P3795R2
P4156R0
16 (частично)*
Constexpr-исключения для обработки ошибок в рефлексии (FTM)* P3560R2 16
std::define_static_object, std::define_static_array, std::define_static_string (FTM)* P3491R3 16
std::simd::basic_vec и std::simd::basic_mask являются типами диапазонов P3480R6 16
std::optional<T&> (FTM)* (FTM)* P2988R12
P3836R2
16 22
std::string::subview() и std::string_view::subview() (FTM)* P3044R2 16 22
Constexpr std::shared_ptr и сопутствующие функции (FTM)* P3037R6
Типы задач корутин (FTM)* P3552R3
P3980R1
P3927R2
P3941R4
P4151R1
Асинхронные области видимости: создание областей для непоследовательного параллелизма (FTM)* P3149R11
P3815R1
Параллельный планировщик (FTM)* P2079R10
P3804R2
Высококачественная диагностика отправителей (senders) с помощью constexpr-исключений P3557R3
Адаптеры отправителей execution::write_env и execution::unstoppable P3284R4
std::views::indices (FTM)* P3060R3 16
Параллельные алгоритмы для диапазонов (FTM)* P3179R9
P3709R2
Атомарные min/max для чисел с плавающей точкой (FTM)* P3008R6
Атомарные операции редукции (FTM)* P3111R8
Операции перестановки SIMD (FTM)* P2664R11
std::mdspan::at() P3383R3 16
std::exception_ptr_cast() (FTM)* P2927R3
P3748R0
P3981R2
16 (частично)*
Стандартизированный порядок типов для constexpr (FTM)* P2830R10
P3778R0
P4140R0
16
std::constant_wrapper (FTM)* P2781R9
P3978R3
16 23
Изменения в std::apply: std::apply_result, std::is_applicable и std::is_nothrow_applicable (FTM)* P1317R2
Согласование использования аллокатора со стиранием типов в std::promise и std::packaged_task P3503R3 17 19.51*
std::filesystem::path::display_string() и std::filesystem::path::native_encoded_string() (FTM)* P2319R5
Устранение неожиданного поведения std::istream::ignore() P3223R2 16 19.50*
DR11: Устранены несоответствия в begin/end для std::valarray и std::initializer_list (FTM)* (FTM)* P3016R6 19.51*
Исправления std::flat_meow (FTM)* (FTM)* P3567R2 22 19.51*
Обеспечение возможности использования std::integer_sequence в структурированных привязках и инструкциях развертывания (FTM)* P1789R3 16 22
Constexpr-форматирование текста (FTM)* P3391R2
std::start_lifetime (FTM)* P3726R2
std::is_structural: признак типа для обнаружения структурных типов (FTM)* P3856R8 16
std::constant_wrapper в качестве аргумента конструктора std::function_ref P3948R1 16 24
Поддержка signedchar и unsignedchar при генерации случайных чисел P4037R1
Определяемое реализацией обнаружение заменяемости обработчика

нарушения контракта с помощью макроса возможностей (FTM)*

P3886R0 16
DR20: Сделать пользовательские конструкторы итераторов/сентинелов представлений приватными P3059R2 Да
DR20: Расширения представлений filter для более безопасного использования (FTM)* P3725R3 16


Возможность C++26


Документ(ы)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

Возможности 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 and #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) для разрешения объявления псевдонима 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
Экранированные последовательности с разделителями 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 стандарта Юникод 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 Н/Д Н/Д Н/Д Н/Д
Предоставление информации о полученном размере в интерфейсе аллокатора (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 быть 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 (частично)* 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*
частично*
Исправление константных итераторов, сторожей (sentinel) и диапазонов. 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*
Обновление руководств по выведению типов (deduction guides) для операторов вызова с явным параметром объекта LWG3617 14 19.34*
Обновление руководств по выведению типов (deduction guides) для 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: Устранение stashing-итераторов для правильного уплощения P2770R0 14 21
18 (частично)
19.37*
DR17: std::visit() для классов, производных от std::variant (FTM)* P2162R2 11.3 13 19.20**
19.30*
13.1.6*
DR20: Условно заимствованные диапазоны (conditionally borrowed ranges) 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*

Возможности C++20

Возможности ядра языка C++20

Возможность C++20

Документ(ы)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ex PGI)*
Nvidia nvcc
Cray
Разрешить захват в лямбда-выражении [=,this] P0409R2 8 6 19.22* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
__VA_OPT__ P0306R4
P1042R1
8 (частично)*
10 (частично)*
12
9 19.25* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Именованные инициализаторы (FTM)* P0329R4 4.7 (частично)*
8
3.0 (частично)*
10
19.21* 12.0.0* 5.1 2021.1 20.7 12.0 11.0
template-parameter-list для обобщённых лямбд (FTM)* P0428R2 8 9 19.22* 11.0.0* 5.1 2021.1 20.7 12.0 11.0
Инициализаторы членов по умолчанию для битовых полей P0683R1 8 6 19.25* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
Конструкторы со списком инициализации в выводе аргументов шаблона класса P0702R1 8 6 19.14* Да 5.0 2021.1 20.7 12.0 11.0
Указатели на члены, квалифицированные const& P0704R1 8 6 19.0 (2015)* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
Концепты (FTM)* P0734R0 5*
10
10 19.23* (частично)*
19.30*
12.0.0* (частично) 6.1 2023.1* 20.11 12.0 11.0
Лямбды в невычисляемых контекстах P0315R4 9 13 (частично)*
14 (частично)*
17
19.28 (16.8)* 13.1.6* (частично) 6.2 2023.1 (частично)
2024.0
20.7 12.0
Оператор трёхстороннего сравнения (FTM)* P0515R3 10 8 (частично)
10
19.20* 12.0.0* 5.1 2021.1 20.7 12.0 11.0
DR11: Упрощение неявного захвата в лямбда-выражениях P0588R1 8 19.24* 5.1 2021.1 20.7 12.0
init-statements для циклов range-based for P0614R1 9 8 19.25* 11.0.0* 6.0 2021.7 20.11 12.0 11.0
Поддерживающие конструирование по умолчанию и присваивание лямбды без состояния P0624R2 9 8 19.22* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
Несоответствие типов специальных функций-членов со значением по умолчанию P0641R2 9 (частично)* 8 19.0 (2015)* (частично)* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
Проверка доступа при специализации P0692R1 Да 8 (частично)
14
19.26* 14.0.0* 5.1 2021.1 20.7 12.0
ADL и невидимые шаблоны функций P0846R0 9 9 19.21* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
DR11: Уточнение случаев, когда определения constexpr-функций необходимы для вычисления констант (FTM)* P0859R0 5.2 (частично)*
9
8 19.27* (частично)*
19.31**
11.0.0* (частично) 12.0 11.0
Атрибуты [[likely]] и [[unlikely]] P0479R5 9 12 19.26* 13.0.0* 5.1 2021.7 20.7 12.0
Сделать typename более необязательным P0634R3 9 16 19.29 (16.10)* 16.0.0* 5.1 2023.1 20.7 12.0
Pack-expansions в захватах инициализации лямбда-выражений (FTM)* P0780R2 9 9 19.22* 11.0.3* 6.1 2021.7 20.11 12.0 11.0
Атрибут [[no_unique_address]] P0840R2 9 9 19.28 (16.9)** 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Условно-тривиальные специальные функции-члены (FTM)* P0848R3 10 16 19.28 (16.8)* 6.1 2021.7 20.11 12.0
DR17: Ослабление правил поиска точек кастомизации для структурированных привязок P0961R1 8 8 19.20* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
DR11: Ослабление правил поиска точек кастомизации для цикла range-for P0962R1 8 8 19.25* 11.0.0* 5.1 2021.1 20.7 12.0 11.0
DR17: Разрешение структурированных привязок к доступным членам P0969R0 8 8 19.20* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
Разрушающий operator delete (FTM)* P0722R3 9 6 19.27* 10.0.0* 6.1 2023.1 20.11 12.0 11.0
Типы классов в параметрах шаблона, не являющихся типами P0732R2 9 12 (частично) 19.26*(частично)*
19.28 (16.9)*
13.0.0* (частично) 6.2 2023.1 (частично) 21.3 12.0
Объявление устаревшим неявного захвата this через [=] P0806R2 9 7 19.22* 10.0.1* 5.1 20.7 12.0 11.0
explicit(bool) (FTM)* P0892R2 9 9 19.24* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Интеграция макросов проверки возможностей P0941R2 5 3.4 19.15* (частично)
19.20*
Да 5.0 2021.1 20.7 12.0 11.0
Запрет агрегатов с объявленными пользователем конструкторами P1008R1 9 8 19.20* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
constexpr виртуальные функции (FTM)* P1064R0 9 9 19.28 (16.9)* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Улучшение согласованности для сравнений P1120R0 10 8 (частично)
10
19.22* 12.0.0* 5.1 2023.1 20.7 12.0 11.0
char8_t (FTM)* P0482R6 9 7* 19.22* 10.0.0* 5.1 2021.1 20.7 12.0 11.0
std::is_constant_evaluated() (FTM)* P0595R2 9 9 19.25* 11.0.3* 5.1 19.1 21.1 12.0 11.0
Блоки try-catch в constexpr P1002R1 9 8 19.25* 10.0.1* 5.1 2023.1 20.7 12.0 11.0
Непосредственные функции (consteval) (FTM)* P1073R3 10 (частично)*
11
11 (частично)
14 (частично)*
17
19.28 (16.8)*
(частично)*

19.29 (16.10)*
11.0.3* (частично)
15.0.0*
5.1 2021.1 20.7 12.0
Вложенные inline-пространства имён P1094R2 9 8 19.27* 10.0.1* 5.1 2021.1 20.7 12.0 11.0
Ещё один подход к ограниченным объявлениям P1141R2 10 10 19.26* (частично)
19.28 (16.9)*
12.0.5* 6.1 2023.1 20.11 12.0 11.0
Знаковые целые числа представлены в дополнительном коде P1236R1 9 9 Да 11.0.3* Н/Д 2023.1* да* 12.0 11.0
dynamic_cast и полиморфный typeid в константных выражениях P1327R1 10 9 19.28 (16.9)* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Смена активного члена объединения внутри constexpr (FTM)* P1330R0 9 9 19.10* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Корутины (FTM)* (FTM)* P0912R5
LWG3393
10 8 (частично)
17 (частично)*
19.0 (2015)* (частично)
19.10**
19.28 (16.8)*
10.0.1* (частично) 5.1 2021.1 23.3* 12.0 (только код хоста)
Инициализация агрегатов в круглых скобках (FTM)* P0960R3 10 16 19.28 (16.8)* 16.0.0* 5.1 2021.1 20.7 12.0
DR11: Вывод размера массива в new-выражениях P1009R2 11 9 19.27* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Модули (FTM)* P1103R3 11 (частично) 8 (частично) 19.0 (2015)* (частично)
19.10**
19.28 (16.8)*
10.0.1* (частично) 2023.1 (частично)
Более строгие требования к Unicode P1041R4
P1139R2
10 Да 19.0 (2015)**
19.26**
Да Н/Д 2023.1* Да 12.0 11.0
<=> != == P1185R2 10 10 19.22* 12.0.0* 5.1 2021.1 20.7 12.0 11.0
DR11: Явно объявленные по умолчанию функции с различными спецификациями исключений P1286R2 10 9 19.28 (16.8)* 11.0.3* 5.1 2021.1 20.7 12.0 11.0
Захват лямбдой и спецификаторы класса памяти структурированных привязок P1091R3
P1381R1
10 8 (частично)
16
19.11**
19.24**
16.0.0* 5.1 2021.1 20.7 12.0
Разрешить преобразования в массивы неизвестной границы P0388R4 10 14 19.27* 14.0.0* 6.0 2021.5 20.11 12.0
Операции с контейнерами в constexpr (FTM)* P0784R7 10 10 19.28 (16.9)* 12.0.0* 6.0 2021.5 20.11 12.0 11.0
Объявление устаревшими некоторых вариантов использования volatile P1152R4 10 10 19.27* 12.0.0* 6.0 2021.5 20.11 12.0 11.0
constinit (FTM)* P1143R2 10 10 19.29 (16.10)* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
Объявление устаревшим оператора запятая в индексах P1161R3 10 9 19.25* 11.0.3* 6.0 2021.7 20.11 12.0 11.0
[[nodiscard]] с сообщением P1301R4 10 9 19.25* 11.0.3* 6.0 2021.5 20.11 12.0 11.0
Тривиальная инициализация по умолчанию в функциях constexpr P1331R2 10 10 19.27* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
Невычисляемое объявление asm в функциях constexpr P1668R1 10 10 19.28 (16.9)* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
using enum (FTM)* P1099R5 11 13 19.24* 13.1.6* 6.3 2023.1 22.5 12.0
Синтезирование трёхстороннего сравнения для заданной категории сравнения P1186R3 11 10 19.24* 12.0.0* 6.0 2021.5 20.11 12.0 11.0
DR17: [[nodiscard]] для конструкторов P1771R1 10 9 19.24* 11.0.3* 6.0 2021.5 20.11 12.0 11.0
Вывод аргументов шаблона класса для шаблонов псевдонимов (FTM)* P1814R0 10 19 19.27* 6.5 23.9 12.0
Вывод аргументов шаблона класса для агрегатов (FTM)* P1816R0
P2082R1
10*
11*
17 19.27* 6.3 2023.1 (частично)*
2024.1
23.3 12.0
DR11: Неявное перемещение для большего количества локальных объектов и rvalue-ссылок P1825R0 11* 13 19.24* 13.1.6* 6.0 2021.5 20.11 12.0
Разрешить сравнения по умолчанию по значению P1946R0 10 10 19.25* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
Удалить std::weak_equality и std::strong_equality P1959R0 10 10 19.25* 12.0.0* 6.1 2021.7 20.11 12.0 11.0
Несоответствия с нетиповыми параметрами шаблона (FTM)* P1907R1 10 (частично)
11
18 (частично)* 19.26* 13.1.6* (частично) 6.2 2023.1 (частично) 21.3 12.0
DR98: Псевдодеструкторы завершают время жизни объектов P0593R6 11 11 Да 12.0.5* Н/Д 2023.1* Да 12.0 11.0
DR11: Преобразование из T* в bool должно считаться сужающим P1957R2 10*
11*
11 19.27* 12.0.5* 6.1 12.0 11.0


Возможность C++20


Документ(ы)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (бывший PGI)*
Nvidia nvcc
Cray

Возможности стандартной библиотеки C++20

Возможность C++20

Документ(ы)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
std::endian (FTM)* P0463R1 8 7 19.22* 10.0.0*
Расширение std::make_shared() для поддержки массивов (FTM)* P0674R1 12 15 19.27* 14.0.3*
Атомарные типы с плавающей запятой (FTM)* P0020R6 10 18 19.22* 16.0.0*
Синхронизированные буферизованные потоки (std::basic_osyncstream) (FTM)* P0053R7 11 18 19.29 (16.10)*
constexpr для <algorithm> и <utility> (FTM)* P0202R3 10 8 (частично)
12
19.26* 10.0.1* (частично)
13.0.0*
Расширение constexpr для <complex> (FTM)* P0415R1 9 7 (частично)
16
19.27* 10.0.0* (частично)
15.0.0*
Преобразование std::memory_order в перечисление с областью видимости P0439R0 9 9 19.25* 11.0.3*
Проверка префикса и суффикса строк: string(_view) ::starts_with / ends_with (FTM)* P0457R2 9 6 19.21* 10.0.0*
Библиотечная поддержка operator<=> <compare> (FTM)* P0768R1 10 7 (частично)
12 (частично)*
17
19.20* (частично)
19.28 (16.9)*
13.0.0*
std::remove_cvref (FTM)* P0550R2 9 6 19.20* 10.0.0*
[[nodiscard]] в стандартной библиотеке P0600R1 9 7 (частично)
16
19.13* (частично)
19.22*
10.0.0* (частично)
15.0.0*
Использование std::move в числовых алгоритмах P0616R0 9 12 19.23* 13.0.0*
Утилита для преобразования указателя в сырой указатель (FTM)* P0653R2 8 6 19.22* Да
Атомарные std::shared_ptr и std::weak_ptr (FTM)* P0718R2 12 19.27*
std::span (FTM)* P0122R7 10 7 19.26* 10.0.0*
Календарь и часовые пояса (FTM)* P0355R7 11 (частично)*
13 (частично)*
14
7 (частично)
19 (частично)*
19.29 (16.10)* 10.0.0* (частично)
<version> P0754R2 9 7 19.22* 10.0.0*
Сравнение неупорядоченных контейнеров P0809R0 Да Да 16.0* Да
Требования ConstexprIterator (FTM)* (FTM)* P0858R0 9 12 19.11* 13.0.0*
std::basic_string::reserve() не должен уменьшаться P0966R1 11 8 19.25* 10.0.1*
Атомарная операция compare-and-exchange с битами заполнения P0528R3 13 19.28 (16.8)*
std::atomic_ref (FTM)* P0019R8 10 19 19.28 (16.8)*
Функция-член contains() ассоциативных контейнеров, например std::map::contains() P0458R2 9 13 19.21* 13.1.6*
DR11: Гарантированное исключение копирования для покомпонентного конструирования P0475R1 9 Да 19.29 (16.10)* Да
std::bit_cast() (FTM)* P0476R2 11 14 19.27* 14.0.3*
Целочисленные операции со степенями двойки:

std::bit_ceil(), std::bit_floor(), std::bit_width(), std::has_single_bit() (FTM)*

P0556R3
P1956R1
9*
10*
9*
12*
19.25**
19.27**
19.28 (16.8)*
11.0.3**
13.0.0**
Улучшение возвращаемого значения алгоритмов типа erase (FTM)* P0646R1 9 10 19.21* 12.0.0*
std::destroying_delete_t (FTM)* P0722R3 9 9 19.27* 11.0.3*
std::is_convertible (FTM)* P0758R1 9 9 19.23* 11.0.3*
Добавление std::shift_left/right в <algorithm> (FTM)* P0769R2 10 12 (частично)* 19.21* 13.0.0* (частично)*
Constexpr для функций, связанных с std::swap() и swap P0879R0 10 13 19.26* 13.1.6*
std::type_identity (FTM)* P0887R1 9 8 19.21* 10.0.1*
Библиотека концептов (FTM)* P0898R3 10 13 19.23* 13.1.6*
constexpr операторы сравнения для std::array P1023R0 10 8 19.27* 10.0.1*
std::unwrap_ref_decay и std::unwrap_reference (FTM)* P0318R1 9 8 19.21* 10.0.1*
std::bind_front() (FTM)* P0356R5 9 13 19.25* 13.1.6*
std::reference_wrapper для неполных типов P0357R3 9 8 19.26* 10.0.1*
Исправление operator>>(basic_istream&, CharT*) P0487R1 11 8 19.23* 10.0.1*
Библиотечная поддержка для char8_t (FTM)* P0482R6 9 8 (частично)
16
19.22* 10.0.1* (частично)
15.0.0*
Вспомогательные функции для реализации конструирования с использованием аллокатора P0591R4 9 16 19.29 (16.10)* 15.0.0*
DR17: std::variant и std::optional должны распространять тривиальность копирования/перемещения P0602R4 8.3 8 19.11* 10.0.1*
DR17: Разумный преобразующий конструктор std::variant P0608R3 10 9 19.29 (16.10)**
19.42**
11.0.3*
Конструктор перемещения std::function должен быть noexcept P0771R1 7.2 6 19.22* Да
Единое предложение по диапазонам (One Ranges Proposal) (FTM)* P0896R4 10 13 (частично)
15*
19.29 (16.10)* 14.0.3*
Гетерогенный поиск для неупорядоченных ассоциативных контейнеров (FTM)* P0919R3
P1690R1
11 12 19.23* (P0919R3)
19.25* (P1690R1)
13.0.0*
<chrono> zero(), min() и max() должны быть noexcept P0972R0 9 8 19.14* 10.0.1*
constexpr в std::pointer_traits (FTM)* P1006R1 9 8 19.26* 10.0.1*
std::assume_aligned() (FTM)* P1007R3 9*
11
15 19.28 (16.9)* 14.0.3*
Создание умных указателей с инициализацией по умолчанию (например, make_unique_for_overwrite) (FTM)* P1020R1
P1973R1
11*
12*
16 19.28 (16.9)* 15.0.0*
Различные части constexpr (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* P1032R1 10 13 19.28 (16.8)* 13.1.6*
Удаление операторов сравнения из std::span P1085R2 10 8 19.26* 10.0.1*
Более последовательное распространение аллокаторов с состоянием для operator+(basic_string) P1165R1 10 15 19.26* 14.0.3*
Последовательное удаление элементов из контейнеров, например, std::erase(std::vector) или std::erase_if(std::map) (FTM)* P1209R0
P1115R3
9*
10*
8*
11*
19.25**
19.27**
10.0.1**
12.0.5**
Единицы заголовков (header units) стандартной библиотеки P1502R1 11 19.29 (16.10)*
polymorphic_allocator<> в качестве словарного типа (FTM)* P0339R6 9 16 19.28 (16.9)* 15.0.0*
std::execution::unseq (FTM)* P1001R2 9 17 19.28 (16.8)*
std::lerp() и std::midpoint() (FTM)* P0811R3 9 9 19.23* (частично)
19.28 (16.8)*
11.0.3*
Улучшения удобства использования std::span P1024R3 10 9*
14
19.26* 11.0.3*
DR17: Сделать std::create_directory() интуитивно понятным P1164R1 8.3 12 19.20* 13.0.0*
std::ssize() и беззнаковая длина для std::span (FTM)* P1227R2 10 9 19.25* 11.0.3*
Трейты для (не)ограниченных массивов (FTM)* P1357R1 9 9 19.25* 11.0.3*
std::to_array() (FTM)* P0325R4 10 10 19.25* 12.0.0*
Эффективный доступ к буферу std::basic_stringbuf P0408R7 11 17 19.29 (16.10)* 15.0.0*
Трейты совместимости расположения и взаимообратимости указателей (FTM)* (FTM)* P0466R5 12 19.29 (16.10)**
Битовые операции: std::

rotl(), rotr(), countl_zero(), countl_one(), countr_zero(), countr_one(), popcount() (FTM)*

P0553R4 9 9 19.25**
19.28 (16.8)*
11.0.3*
Математические константы (FTM)* P0631R8 10 11 19.25* 12.0.5*
Форматирование текста (FTM)* P0645R10 13 14**
17
19.29 (16.10)* 15.0.0*
std::stop_token и std::jthread (FTM)* P0660R10 10 17
(частично)*

20*
19.28 (16.9)*
constexpr std::allocator и связанные утилиты (FTM)* P0784R7 10 12 19.29 (16.10)* 13.0.0*
constexpr std::string (FTM)* P0426R1
P1032R1
P0980R1
12 15 19.29 (16.10)*
19.30**
14.0.3*
constexpr std::vector (FTM)* P1004R2 12 15 19.29 (16.10)*
19.30**
14.0.3*
Входные адаптеры диапазонов P1035R7 10 16 19.29 (16.10)* 15.0.0*
constexpr std::invoke() и связанные утилиты P1065R2 10 12 19.28 (16.8)* 13.0.0*
Атомарное ожидание и уведомление, std::counting_semaphore, std::latch и std::barrier (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* (FTM)* P1135R6 11 11 19.28 (16.9)* 13.1.6*
std::source_location (FTM)* P1208R6 11 15*
(частично)
16
19.29 (16.10)* 15.0.0*
Добавление <=> в стандартную библиотеку P1614R2 10 14*
(частично)
17*
(частично)
19
19.29 (16.10)* 13.1.6* (частично)
constexpr конструктор по умолчанию для std::atomic и std::atomic_flag (FTM)* P0883R2 10 13 19.26* 13.1.6*
constexpr для числовых алгоритмов (FTM)* P1645R1 10 12 19.26* 13.0.0*
Безопасные сравнения целых чисел (FTM)* P0586R2 10 13 19.27* 13.1.6*


Возможность C++20


Документ(ы)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*

Более старые стандарты

  • Возможности ядра языка C++17
  • Возможности библиотеки C++17
  • Возможности ядра языка C++14
  • Возможности библиотеки C++14
  • Возможности ядра языка C++11
  • Возможности библиотеки C++11

См. также

Тестирование возможностей (C++20) Набор макросов препроцессора для проверки наличия соответствующих возможностей языка и библиотеки C++
Документация по C для поддержки компиляторами

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

Spec-Zone.ru

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