Пространства имён
Варианты
Действия

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

Материал из cppreference.com

[править] Основные возможности языка C++20

Возможность C++20
 
Статья(и)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ для AIX
IBM Open XL C++ для z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (бывшая PGI)*
Nvidia nvcc
Разрешает лямбда-захват [=,this] P0409R2 8 6 19.22*

10.0.0*

5.1
__VA_OPT__ P0306R4
P1042R1
8 (частично)*
10 (частично)*
9 19.25*

11.0.3*

5.1
Назначенные инициализаторы P0329R4 4.7 (частично)*
8
3.0 (частично)*
10
19.21* (частично)* 5.1 2021.4
Список параметров шаблона для общих лямбда-выражений P0428R2 8 9 19.22*

11.0.0*

5.1
Инициализаторы элементов по умолчанию для битовых полей P0683R1 8 6 19.25*

10.0.0*

5.1 2021.4
Конструкторы списка инициализаторов в выводе аргументов шаблона класса P0702R1 8 6 19.14* Да 5.0 2021.4
Указатели на элементы с квалификацией const& P0704R1 8 6 19.0 (2015)*

10.0.0*

5.1 2021.4
Концепции P0734R0 6
(только TS)
10
10 19.23* (частично)*
19.30*

12.0.0* (частично)

6.1 2021.4 20.11
Лямбды в неоцененных контекстах P0315R4 9 19.28 (16.8)* 2021.4
Оператор трёхстороннего сравнения P0515R3 10 8 (частично)
10
19.20* 5.1 2021.4
DR: Упрощение неявного лямбда-захвата P0588R1 8 19.24* 5.1 2021.4
Операторы инициализации для диапазонного for P0614R1 9 8 19.25*

11.0.0*

6.0 2021.4
Конструктивные и назначаемые лямбды без сохранения состояния по умолчанию P0624R2 9 8 19.22*

10.0.1*

5.1 2021.4
Несоответствие const с конструктором копирования по умолчанию P0641R2 9 8 19.0 (2015)*

10.0.1*

5.1 2021.4 20.7
Проверка доступа по специализациям P0692R1 Да 8 (частично)
14
19.26*

10.0.1* (частично)

5.1 2021.4 20.7
ADL и шаблоны функций, которые не видны P0846R0 9 9 19.21*

11.0.3*

5.1 2021.4 20.7
Менее активная реализация функций constexpr P0859R0 5.2 (частично)*
9
8 19.27* (частично)* 2021.4
Атрибуты [[likely]] и [[unlikely]] P0479R5 9 12 19.26*

13.0.0*

5.1 2021.4 20.7
typename сделан чаще необязательным P0634R3 9 5.1 2021.4
Расширение пакета при захвате лямбда-инициализации P0780R2 9 9 19.22*

11.0.3*

6.1 2021.4
Атрибут [[no_unique_address]] P0840R2 9 9 19.28 (16.9)**

11.0.3*

5.1 2021.4 20.7
Условно Тривиальные Специальные Функции-Элементы P0848R3 10 19.28 (16.8)* 6.1 2021.4
DR: Ослабление правил поиска точек настройки структурных привязок P0961R1 8 8 19.21*

10.0.1*

5.1 2021.4
DR: Ослабление правил поиска точки настройки диапазонного цикла for P0962R1 8 8 5.1 2021.4
DR: Разрешены структурные привязки к доступным элементам P0969R0 8 8 19.21*

10.0.1*

5.1
Уничтожающий оператор delete P0722R3 9 6 19.27*

10.0.0*

6.1
Типы классов в параметрах шаблона не типах P0732R2 9 19.26*(частично)*
19.28 (16.9)*
Исключён неявный захват this через [=] P0806R2 9 7 19.22* 5.1
explicit(bool) P0892R2 9 9 19.24*

11.0.3*

5.1
Интеграция макросов тестирования функциональностей P0941R2 5 3.4 19.15* (частично)
19.20*
Да 5.0
Запрещены агрегаты с конструкторами, объявленными пользователем P1008R1 9 8 19.20*

10.0.1*

5.1
Виртуальная функция constexpr P1064R0 9 9

11.0.3*

5.1
Улучшения согласованности для сравнений P1120R0 10 8 (частично)
10
19.22*

10.0.1* (частично)

5.1
char8_t P0482R6 9 7 19.22*

10.0.0*

5.1
std::is_constant_evaluated() P0595R2 9 9 19.25*

11.0.3*

5.1 19.1
constexpr try-catch блоки P1002R1 9 8 19.25*

10.0.1*

5.1
Немедленные функции (consteval) P1073R3 10 (частично)*
11
11 (частично)
14 (частично)*
19.28 (16.8)**
(частично)
19.29 (16.10)*
5.1
Вложенные встраиваемые пространства имён P1094R2 9 8 19.27*

10.0.1*

5.1
Ещё один подход для ограниченных объявлений P1141R2 10 10 19.26* (частично) 6.1
Целые числа со знаком, это дополнение до двух P1236R1 9 9 Н/Д

11.0.3*

Н/Д
dynamic_cast и полиморфный typeid в константных выражениях P1327R1 10 9

11.0.3*

5.1 20.7
Изменение активного элемента объединения внутри constexpr P1330R0 9 9 19.10*

11.0.3*

5.1
Сопрограммы P0912R5 10 8 (частично) 19.25*
19.28 (16.8)*

10.0.1* (частично)

5.1
Инициализация агрегатов в скобках P0960R3 10 19.28 (16.8)* 5.1
DR: Вывод размера массива из выражения new P1009R2 11 9 19.27*

11.0.3*

5.1
Модули P1103R3 11 (частично) 8 (частично) 19.0 (2015)* (частично)
19.10* (только ТС)
19.28 (16.8)*(частично)

10.0.1* (частично)

Более строгие требования Юникода P1041R4
P1139R2
10 Да 19.0 (2015)* (P1041R4)
19.26* (P1139R2)
Да Н/Д
<=> != == P1185R2 10 10 19.22* 5.1
DR: Явно заданные по умолчанию функции с различными спецификациями исключений P1286R2 10 9 19.28 (16.8)*

11.0.3*

5.1
Лямбда-захват и спецификаторы класса памяти структурных привязок P1091R3
P1381R1
10 8 (частично) 19.11*(P1381R1)
19.24*(P1091R3)

10.0.1* (частично)

5.1
Разрешено преобразование в массивы с неизвестной границей P0388R4 10 19.27* 6.0
Контейнерные операции constexpr P0784R7 10 10 6.0
Устарела поддержка некоторых видов использования volatile P1152R4 10 10 19.27* 6.0
constinit P1143R2 10 10 6.1
Устарел оператор запятой в индексах P1161R3 10 9 19.25*

11.0.3*

6.0
[[nodiscard]] с сообщением P1301R4 10 9 19.25*

11.0.3*

6.0
Тривиальная инициализация по умолчанию в функциях constexpr P1331R2 10 10 19.27* 6.1
Неоценённое объявление asm в функциях constexpr P1668R1 10 10 6.1
использование enum P1099R5 11 13 19.24* 6.3
Синтез трёхстороннего сравнения для указанной категории сравнения P1186R3 11 10 19.24* 6.0
DR: [[nodiscard]] для конструкторов P1771R1 10 9 19.24*

11.0.3*

6.0
Вывод аргументов шаблона класса для шаблонов псевдонимов P1814R0 10 19.27*
Вывод аргументов шаблона класса для агрегатов P1816R0
P2082R1
10(P1816R0)
11(P2082R1)
19.27*(P1816R0)
DR: Неявное перемещение для большего количества локальных объектов и ссылок на rvalue P1825R0 11* 13 19.24* 6.0
Разрешено сравнения по умолчанию по значению P1946R0 10 10 19.25* 6.1
Удалены std::weak_equality и std::strong_equality P1959R0 10 10 19.25* 6.1
Несоответствия с параметрами шаблона, отличными от типа P1907R1 9 19.26* 6.2
DR: Псевдодеструкторы завершают время жизни объекта P0593R6 11 11 Н/Д
DR: Преобразование из T* в bool следует рассматривать как сужение P1957R2 10*
11*
19.27* 6.1


C++20 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XL C++
IBM Open XL C++ для AIX
IBM Open XL C++ для z/OS
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++ (бывшая PGI)*
Nvidia nvcc

[править] Возможности библиотеки C++20

C++20 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ для AIX*
Sun/Oracle C++*
Embarcadero C++ Builder*
std::endian P0463R1 8 7 19.22*

10.0.0*

Расширение std::make_shared() для поддержки массивов P0674R1 12 19.27*
Атомарность с плавающей точкой P0020R6 10 19.22*
Синхронизированная буферизация ostream P0053R7 11 19.29 (16.10)*
constexpr для <algorithm> и <utility> P0202R3 10 8 (частично) 19.26*

10.0.1* (частично)
12.0.5*

Подробнее constexpr для <complex> P0415R1 9 7 (частично) 19.27*

10.0.0* (частично)

std::memory_order сделано перечислением с заданной областью видимости P0439R0 9 9 19.25*

11.0.3*

Проверка префикса и суффикса строки: string(_view) ::starts_with/ends_with P0457R2 9 6 19.21*

10.0.0*

Поддержка библиотеки для operator<=> <compare> P0768R1 10 7 (частично)
Как минимум 12*
19.20* (частично)
19.28 (16.9)*

10.0.0* (частично)

std::remove_cvref P0550R2 9 6 19.20*

10.0.0*

[[nodiscard]] в стандартной библиотеке P0600R1 9 7 (частично) 19.13* (частично)
19.22*

10.0.0* (частично)

Использование std::move в числовых алгоритмах P0616R0 9 19.23*
Утилита для преобразования указателя в сырой указатель P0653R2 8 6 19.22* Да
Атомарные std::shared_ptr и std::weak_ptr P0718R2 12 19.27*
std::span P0122R7 10 7 19.26*

10.0.0*

Календарь и timezone P0355R7 11 (частично)*
13 (частично)*
7 (частично) 19.29 (16.10)*

10.0.0* (частично)

<version> P0754R2 9 7 19.22*

10.0.0*

Сравнение неупорядоченных контейнеров P0809R0 Да Да 16.0* Да
Требования ConstexprIterator P0858R0 9 19.11*
std::basic_string::reserve() не должна сжимать P0966R1 11 8 19.25*

10.0.1*

Атомарное Сравнение и Обмен с Битами Заполнения P0528R3 19.28 (16.8)*
std::atomic_ref P0019R8 10 19.28 (16.8)*
contains() функция-элемент ассоциативных контейнеров P0458R2 9 9 (частично)*
13
19.21*

11.0.3*

DR: Гарантированное исключение копирования для кусочного построения P0475R1 9
std::bit_cast() P0476R2 11 14 19.27*
Целочисленные операции степени двойки P0556R3 P1956R1 9 (P0556R3)
10 (P1956R1)
9 (P0556R3)
12 (P1956R1)
19.25* (P0556R3)*
19.27* (P1956R1)*
19.28 (16.8)*
Улучшение возвращаемого значения алгоритмов, подобных erase P0646R1 9 10 19.21*
std::destroying_delete P0722R3 9 9 19.27*

11.0.3*

std::is_nothrow_convertible P0758R1 9 9 19.23*

11.0.3*

Добавлен std::shift_left/right в <algorithm> P0769R2 10 19.21*
Constexpr для связанных функций std::swap() и swap P0879R0 10 12 (частично)
13
19.26*
std::type_identity P0887R1 9 8 19.21*

10.0.1*

Библиотека концепций P0898R3 10 13 19.23*

12.0.0* (частично)

constexpr операторы сравнения для std::array P1023R0 10 8 19.27*

10.0.1*

std::unwrap_ref_decay и std::unwrap_reference P0318R1 9 8 19.21*

10.0.1*

std::bind_front() P0356R5 9 19.25*
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 P0482R6 9 8 (частично)*
19.22*
Служебные функции для реализации построения с использованием аллокаторов P0591R4 9
DR: std::variant и std::optional должны распространять тривиальность копирования/перемещения P0602R4 8.3 8 19.11*

10.0.1*

Разумный конструктор преобразования std::variant P0608R3 10 9

11.0.3*

Конструкторы перемещения для std::function должны быть noexcept P0771R1 7.2 6 19.22* Да
Предложение Одного Диапазона P0896R4 10 (частично)*
19.29 (16.10)*
Гетерогенный поиск для неупорядоченных контейнеров P0919R3 P1690R1 11 12 19.23* (P0919R3)
19.25* (P1690R1)
<chrono> zero(), min() и max() должны быть noexcept P0972R0 9 8 19.14*

10.0.1*

constexpr в std::pointer_traits P1006R1 9 8 19.26*

10.0.1*

std::assume_aligned() P1007R3 9*
11
19.28 (16.9)*
Создание умного указателя с инициализацией по умолчанию P1020R1
P1973R1
19.28 (16.9)*
Разные constexpr биты P1032R1 10 13 19.28 (16.8)*
Удалены операторы сравнения std::span P1085R2 10 8 19.26*

10.0.1*

Сделано распространение аллокатора с сохранением состояния более согласованным для operator+(basic_string) P1165R1 10 19.26*
Последовательное стирание контейнера (например, std::erase (std::vector), std::erase_if (std::map)) P1209R0 P1115R3 9 (P1209R0)
10 (P1115R3)
8 (P1209R0)
11 (P1115R3)
19.25* (P1209R0)
19.27* (P1115R3)

10.0.1* (P1209R0)

polymorphic_allocator<> как тип словаря P0339R6 9 19.28 (16.9)*
std::execution::unseq P1001R2 9 19.28 (16.8)*
std::lerp() и std::midpoint() P0811R3 9 9 19.23* (частично)
19.28 (16.8)*

11.0.3*

Улучшения удобства использования std::span P1024R3 10 9*
14
19.26*

11.0.3*

DR: Сделано create_directory() интуитивно понятным P1164R1 8.3 12 19.20*
std::ssize() и беззнаковый размер для std::span P1227R2 10 9 19.25*

11.0.3*

Свойства для (не)ограниченных массивов P1357R1 9 9 19.25*

11.0.3*

std::to_array() P0325R4 10 10 19.25*
Эффективный доступ к буферу std::basic_stringbuf P0408R7 11 19.29 (16.10)*
Свойства совместимости размещения и взаимоконвертируемости указателей P0466R5 12 19.29 (16.10)**
Битовые операции P0553R4 9 9 19.25**
19.28 (16.8)*

11.0.3*

Математические константы P0631R8 10 11 19.25*
Форматирование текста P0645R10 14* 19.29 (16.10)*
std::stop_token и std::jthread P0660R10 10 19.28 (16.9)*
constexpr std::allocator и сопутствующие утилиты P0784R7 10 12
constexpr std::string P0980R1 12 19.29 (16.10)*
19.30**


constexpr std::vector P1004R2 12 19.29 (16.10)*
19.30**


Диапазонные адаптеры ввода P1035R7 10
constexpr std::invoke() и сопутствующие утилиты P1065R2 10 12 19.28 (16.8)*
Атомарное ожидание и уведомление, std::counting_semaphore, std::latch и std::barrier P1135R6 11 19.28 (16.8)*
std::source_location P1208R6 11
Добавлен <=> в стандартную библиотеку P1614R2 10 14 (частично)* 19.29 (16.10)*
constexpr конструктор по умолчанию для std::atomic и std::atomic_flag P0883R2 10 13 19.26*
constexpr для числовых алгоритмов P1645R1 10 19.26*
Безопасные целочисленные сравнения P0586R2 10 13 19.27*
C++20 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ для AIX*
Sun/Oracle C++*
Embarcadero C++ Builder*