Поддержка C++20 компиляторами
* — наведите указатель на ячейку, отмеченную звездочкой *, чтобы увидеть дополнительные всплывающие примечания.
DRnn — число nn после «DR» обозначает целевую редакцию C++, к которой применяется отчёт об ошибке, например, DR20 → C++20.
Основные языковые возможности C++20
| Возможность C++20 | Статья(и) |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (ранее 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 | |
| Список параметров шаблона для обобщённых лямбд (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 для 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 |
| Блоки constexpr try-catch | 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 | |
| Вложенные встроенные пространства имён | 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* | |
| Атомарное сравнение и обмен с битами заполнения | 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* |
|
Операции с целыми числами для степеней двойки:
|
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* | Да |
| Единое Ranges-предложение (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** |
| Модульные заголовки стандартной библиотеки | 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() и беззнаковое значение extent для 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)*Изначально поддерживается только для MSVC; поддержка Clang появится после устранения LLVM-48860. | ||
|
Битовые операции: std::
| P0553R4 | 9 | 9 |
19.25*с Clang 19.28 (16.8)* | 11.0.3* |
| Математические константы (FTM)* | P0631R8 | 10 | 11 | 19.25* | 12.0.5* |
| Форматирование текста (FTM)* | P0645R10 | 13 | 1414: поддержка включается только при использовании флага -DLIBCXX_ENABLE_INCOMPLETE_FEATURES=ON во время сборки libc++15: поддержка считается экспериментальной и требует флага компилятора -fexperimental-library 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* |
|---|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/compiler_support/20