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

Поддержка компиляторами 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]P0409R28619.22*

10.0.0*

5.1
__VA_OPT__P0306R4
P1042R1
8 (частично)*
10 (частично)*
919.25*

11.0.3*

5.1
Назначенные инициализаторыP0329R44.7 (частично)*
8
3.0 (частично)*
10
19.21*(частично)*5.12021.4
Список параметров шаблона для общих лямбда-выраженийP0428R28919.22*

11.0.0*

5.1
Инициализаторы элементов по умолчанию для битовых полейP0683R18619.25*

10.0.0*

5.12021.4
Конструкторы списка инициализаторов в выводе аргументов шаблона классаP0702R18619.14*Да5.02021.4
Указатели на элементы с квалификацией const&P0704R18619.0 (2015)*

10.0.0*

5.12021.4
КонцепцииP0734R06
(только TS)
10
1019.23* (частично)*
19.30*

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

6.12021.420.11
Лямбды в неоцененных контекстахP0315R4919.28 (16.8)*2021.4
Оператор трёхстороннего сравненияP0515R3108 (частично)
10
19.20*5.12021.4
DR: Упрощение неявного лямбда-захватаP0588R1819.24*5.12021.4
Операторы инициализации для диапазонного forP0614R19819.25*

11.0.0*

6.02021.4
Конструктивные и назначаемые лямбды без сохранения состояния по умолчаниюP0624R29819.22*

10.0.1*

5.12021.4
Несоответствие const с конструктором копирования по умолчаниюP0641R29819.0 (2015)*

10.0.1*

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

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

5.12021.420.7
ADL и шаблоны функций, которые не видныP0846R09919.21*

11.0.3*

5.12021.420.7
Менее активная реализация функций constexprP0859R05.2 (частично)*
9
819.27* (частично)*2021.4
Атрибуты [[likely]] и [[unlikely]]P0479R591219.26*

13.0.0*

5.12021.420.7
typename сделан чаще необязательнымP0634R395.12021.4
Расширение пакета при захвате лямбда-инициализацииP0780R29919.22*

11.0.3*

6.12021.4
Атрибут [[no_unique_address]]P0840R29919.28 (16.9)**

11.0.3*

5.12021.420.7
Условно Тривиальные Специальные Функции-ЭлементыP0848R31019.28 (16.8)*6.12021.4
DR: Ослабление правил поиска точек настройки структурных привязокP0961R18819.21*

10.0.1*

5.12021.4
DR: Ослабление правил поиска точки настройки диапазонного цикла forP0962R1885.12021.4
DR: Разрешены структурные привязки к доступным элементамP0969R08819.21*

10.0.1*

5.1
Уничтожающий оператор deleteP0722R39619.27*

10.0.0*

6.1
Типы классов в параметрах шаблона не типахP0732R2919.26*(частично)*
19.28 (16.9)*
Исключён неявный захват this через [=]P0806R29719.22*5.1
explicit(bool)P0892R29919.24*

11.0.3*

5.1
Интеграция макросов тестирования функциональностейP0941R253.419.15* (частично)
19.20*
Да5.0
Запрещены агрегаты с конструкторами, объявленными пользователемP1008R19819.20*

10.0.1*

5.1
Виртуальная функция constexprP1064R099

11.0.3*

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

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

5.1
char8_tP0482R69719.22*

10.0.0*

5.1
std::is_constant_evaluated()P0595R29919.25*

11.0.3*

5.119.1
constexpr try-catch блокиP1002R19819.25*

10.0.1*

5.1
Немедленные функции (consteval)P1073R310 (частично)*
11
11 (частично)
14 (частично)*
19.28 (16.8)**
(частично)
19.29 (16.10)*
5.1
Вложенные встраиваемые пространства имёнP1094R29819.27*

10.0.1*

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

11.0.3*

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

11.0.3*

5.120.7
Изменение активного элемента объединения внутри constexprP1330R09919.10*

11.0.3*

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

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

5.1
Инициализация агрегатов в скобкахP0960R31019.28 (16.8)*5.1
DR: Вывод размера массива из выражения newP1009R211919.27*

11.0.3*

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

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

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

11.0.3*

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

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

5.1
Разрешено преобразование в массивы с неизвестной границейP0388R41019.27*6.0
Контейнерные операции constexprP0784R710106.0
Устарела поддержка некоторых видов использования volatileP1152R4101019.27*6.0
constinitP1143R210106.1
Устарел оператор запятой в индексахP1161R310919.25*

11.0.3*

6.0
[[nodiscard]] с сообщениемP1301R410919.25*

11.0.3*

6.0
Тривиальная инициализация по умолчанию в функциях constexprP1331R2101019.27*6.1
Неоценённое объявление asm в функциях constexprP1668R110106.1
использование enumP1099R5111319.24*6.3
Синтез трёхстороннего сравнения для указанной категории сравненияP1186R3111019.24*6.0
DR: [[nodiscard]] для конструкторовP1771R110919.24*

11.0.3*

6.0
Вывод аргументов шаблона класса для шаблонов псевдонимовP1814R01019.27*
Вывод аргументов шаблона класса для агрегатовP1816R0
P2082R1
10(P1816R0)
11(P2082R1)
19.27*(P1816R0)
DR: Неявное перемещение для большего количества локальных объектов и ссылок на rvalueP1825R011*1319.24*6.0
Разрешено сравнения по умолчанию по значениюP1946R0101019.25*6.1
Удалены std::weak_equality и std::strong_equalityP1959R0101019.25*6.1
Несоответствия с параметрами шаблона, отличными от типаP1907R1919.26*6.2
DR: Псевдодеструкторы завершают время жизни объектаP0593R61111Н/Д
DR: Преобразование из T* в bool следует рассматривать как сужениеP1957R210*
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::endianP0463R18719.22*

10.0.0*

Расширение std::make_shared() для поддержки массивовP0674R11219.27*
Атомарность с плавающей точкойP0020R61019.22*
Синхронизированная буферизация ostreamP0053R71119.29 (16.10)*
constexpr для <algorithm> и <utility>P0202R3108 (частично)19.26*

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

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

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

std::memory_order сделано перечислением с заданной областью видимостиP0439R09919.25*

11.0.3*

Проверка префикса и суффикса строки: string(_view) ::starts_with/ends_withP0457R29619.21*

10.0.0*

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

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

std::remove_cvrefP0550R29619.20*

10.0.0*

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

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

Использование std::move в числовых алгоритмахP0616R0919.23*
Утилита для преобразования указателя в сырой указательP0653R28619.22*Да
Атомарные std::shared_ptr и std::weak_ptrP0718R21219.27*
std::spanP0122R710719.26*

10.0.0*

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

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

<version>P0754R29719.22*

10.0.0*

Сравнение неупорядоченных контейнеровP0809R0ДаДа16.0*Да
Требования ConstexprIteratorP0858R0919.11*
std::basic_string::reserve() не должна сжиматьP0966R111819.25*

10.0.1*

Атомарное Сравнение и Обмен с Битами ЗаполненияP0528R319.28 (16.8)*
std::atomic_refP0019R81019.28 (16.8)*
contains() функция-элемент ассоциативных контейнеровP0458R299 (частично)*
13
19.21*

11.0.3*

DR: Гарантированное исключение копирования для кусочного построенияP0475R19
std::bit_cast()P0476R2111419.27*
Целочисленные операции степени двойкиP0556R3 P1956R19 (P0556R3)
10 (P1956R1)
9 (P0556R3)
12 (P1956R1)
19.25* (P0556R3)*
19.27* (P1956R1)*
19.28 (16.8)*
Улучшение возвращаемого значения алгоритмов, подобных eraseP0646R191019.21*
std::destroying_deleteP0722R39919.27*

11.0.3*

std::is_nothrow_convertibleP0758R19919.23*

11.0.3*

Добавлен std::shift_left/right в <algorithm>P0769R21019.21*
Constexpr для связанных функций std::swap() и swapP0879R01012 (частично)
13
19.26*
std::type_identityP0887R19819.21*

10.0.1*

Библиотека концепцийP0898R3101319.23*

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

constexpr операторы сравнения для std::arrayP1023R010819.27*

10.0.1*

std::unwrap_ref_decay и std::unwrap_referenceP0318R19819.21*

10.0.1*

std::bind_front()P0356R5919.25*
std::reference_wrapper для неполных типовP0357R39819.26*

10.0.1*

Исправление operator>>(basic_istream&, CharT*)P0487R111819.23*

10.0.1*

Библиотечная поддержка для char8_tP0482R698 (частично)*
19.22*
Служебные функции для реализации построения с использованием аллокаторовP0591R49
DR: std::variant и std::optional должны распространять тривиальность копирования/перемещенияP0602R48.3819.11*

10.0.1*

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

11.0.3*

Конструкторы перемещения для std::function должны быть noexceptP0771R17.2619.22*Да
Предложение Одного ДиапазонаP0896R410 (частично)*
19.29 (16.10)*
Гетерогенный поиск для неупорядоченных контейнеровP0919R3 P1690R1111219.23* (P0919R3)
19.25* (P1690R1)
<chrono> zero(), min() и max() должны быть noexceptP0972R09819.14*

10.0.1*

constexpr в std::pointer_traitsP1006R19819.26*

10.0.1*

std::assume_aligned()P1007R39*
11
19.28 (16.9)*
Создание умного указателя с инициализацией по умолчаниюP1020R1
P1973R1
19.28 (16.9)*
Разные constexpr битыP1032R1101319.28 (16.8)*
Удалены операторы сравнения std::spanP1085R210819.26*

10.0.1*

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

10.0.1* (P1209R0)

polymorphic_allocator<> как тип словаряP0339R6919.28 (16.9)*
std::execution::unseqP1001R2919.28 (16.8)*
std::lerp() и std::midpoint()P0811R39919.23* (частично)
19.28 (16.8)*

11.0.3*

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

11.0.3*

DR: Сделано create_directory() интуитивно понятнымP1164R18.31219.20*
std::ssize() и беззнаковый размер для std::spanP1227R210919.25*

11.0.3*

Свойства для (не)ограниченных массивовP1357R19919.25*

11.0.3*

std::to_array()P0325R4101019.25*
Эффективный доступ к буферу std::basic_stringbufP0408R71119.29 (16.10)*
Свойства совместимости размещения и взаимоконвертируемости указателейP0466R51219.29 (16.10)**
Битовые операцииP0553R49919.25**
19.28 (16.8)*

11.0.3*

Математические константыP0631R8101119.25*
Форматирование текстаP0645R1014*19.29 (16.10)*
std::stop_token и std::jthreadP0660R101019.28 (16.9)*
constexpr std::allocator и сопутствующие утилитыP0784R71012
constexpr std::stringP0980R11219.29 (16.10)*
19.30**


constexpr std::vectorP1004R21219.29 (16.10)*
19.30**


Диапазонные адаптеры вводаP1035R710
constexpr std::invoke() и сопутствующие утилитыP1065R2101219.28 (16.8)*
Атомарное ожидание и уведомление, std::counting_semaphore, std::latch и std::barrierP1135R61119.28 (16.8)*
std::source_locationP1208R611
Добавлен <=> в стандартную библиотекуP1614R21014 (частично)*19.29 (16.10)*
constexpr конструктор по умолчанию для std::atomic и std::atomic_flagP0883R2101319.26*
constexpr для числовых алгоритмовP1645R11019.26*
Безопасные целочисленные сравненияP0586R2101319.27*
C++20 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ для AIX*
Sun/Oracle C++*
Embarcadero C++ Builder*