X Tutup
The Wayback Machine - https://web.archive.org/web/20211102031513/https://ru.cppreference.com/w/cpp/compiler_support
Пространства имён
Варианты
Действия

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

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

Содержание


В следующей таблице представлена поддержка компиляторами новых функциональностей C++. К ним относятся C++11, C++14, C++17, C++20 и принятые позже исправления (C++23/C++2b) стандарта, а также различные технические спецификации.

[править] Возможности C++2b

Обратите внимание, что этот список может измениться по мере развития проекта стандарта

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

C++23 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
(ex Portland Group/PGI)
Nvidia nvcc
Литеральный суффикс для (знакового) size_t P0330R8 11 13
Делает () ещё более необязательными для лямбд P1102R2 11 13
if consteval P1938R3 12
Удалена Поддержка Сборки Мусора P2186R2 12
Синтаксис Идентификаторов C++, использующий Дополнение Стандарта Юникода 31 P1949R7 14
Разрешить Повторяющиеся Атрибуты P2156R1
Сужение контекстных преобразований в static_assert и constexpr if P1401R5 13 (частично)*
14
Обрезка пробелов перед объединением строк P2223R2
Размещение в памяти членов структуры/класса обязанно соответствовать порядку их объявления P1847R4 Да
Конкатенация строковых литералов разных типов (напр. u8"" и L"") запрещена P2201R1 Да Да Да Да Да
Выведение this P0847R7
auto(x) и auto{x} P0849R8
Изменение области видимости конечного возвращаемого типа лямбды P2036R3
#elifdef и #elifndef P2334R1 12 13
Нелитеральные переменные (а также метки и goto) в constexpr функциях P2242R3 12
Взаимосогласованное кодирование символьных литералов P2316R2 Да Да
Наборы символов и кодировки P2314R4 Да
Расширенная инструкция инициализации, разрешающее объявление псевдонима P2360R0 14
Оператор многомерной индексации, нарп. v[x,y,z] P2128R6
C++23 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
Nvidia nvcc

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

C++23 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
Стандартная Библиотека
Embarcadero C++ Builder
Стандартная Библиотека
Cray C++
Стандартная Библиотека
Библиотека Stacktrace P0881R7
<stdatomic.h> P0943R6
std::is_scoped_enum P1048R1 11 12
contains() для

basic_string / basic_string_view

P1679R3 11 12
std::to_underlying P1682R3 11 13 19.30*
std::visit для классов, производных от std::variant P2162R2 12 13 19.20**
19.30*
Смягчающие требования для time_point<>::clock P2212R2 Н/Д Н/Д
DR: Условно заимствованные диапазоны P2017R1 19.30*
DR: Восстановление адаптеров входного диапазона и std::counted_iterator P2259R1
Предоставление обратной связи по размеру в интерфейсе Allocator'а P0401R6 19.30*
<spanstream> : строковый поток с буфером на основе std::span P0448R4 19.31*
std::out_ptr(), std::inout_ptr() P1132R8
constexpr type_info::operator==() P1328R1
Конструкторы итераторов пар для std::stack и std::queue P1425R4
Невыводимый контекст для аллокаторов в принципах вывода для контейнеров P1518R2 13
ranges::starts_with() и ranges::ends_with() P1659R3
Запрещение создания std::basic_string и std::basic_string_view из nullptr P2166R1
std::invoke_r() P2136R3 12 19.31*
Диапазонный конструктор для std::basic_string_view P1989R2 11
Аргументы шаблона по умолчанию для конструктора пересылки для pair P1951R1 12 14 19.30*
Удаление Сборки Мусора и Обнаружения Утечек на Основе Доступности (поддержка библиотеки) P2186R2 12
DR: join_view должен присоединяться ко всем видам диапазонов P2328R1 19.30*
DR: view не требует default_initializable P2325R3
DR: Объекты адаптера диапазона связывают аргументы по значению P2281R1 19.29 (16.10)*
(частично)*
19.31*
DR: constexpr для std::optional и std::variant P2231R1 13 (частично)* 19.31*
DR: Улучшение std::format() P2216R3
DR: lazy_split_view и переработанная split_view P2210R2 19.31*
Псевдоним std::pmr::stacktrace P2301R1
zip P2321R2
Гетерогенные перегрузки стирания для ассоциативных контейнеров P2077R3
std::byteswap() P1272R4 19.31*
Печать volatile T* P1147R1 12 19.31*
basic_string::resize_and_overwrite P1072R10 12
Одновалентные операции для std::optional P0798R8 12
std::move_only_function P0288R9 12
Добавлена условная noexcept спецификация в std::exchange P2401R0 12 14 19.25*
Требует, чтобы span и basic_string_view были TriviallyCopyable P2251R1 Да Да Да Да
Очистка целочисленных типов P2393R1
Уточнение статуса “заголовков C” P2340R1
DR: Исправлен ranges::istream_view P2432R1 19.31*
DR: Добавлена поддержка для std::generator подобных типов в std::format P2418R2
DR: Что такое view P2415R2
DR: исправление обработки локали в форматерах chrono P2372R3
C++23 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
Стандартная Библиотека
Embarcadero C++ Builder
Стандартная Библиотека
Cray C++
Стандартная Библиотека

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

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

C++20 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
(ex Portland Group/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
Список параметров шаблона для общих лямбда-выражений P0428R2 8 9 19.22*

11.0.0*

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

10.0.0*

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

10.0.0*

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

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

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

11.0.0*

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

10.0.1*

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

10.0.1*

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

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

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

11.0.3*

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

13.0.0*

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

11.0.3*

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

11.0.3*

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

10.0.1*

5.1
DR: Ослабление правил поиска точки настройки диапазонного цикла for P0962R1 8 8 5.1
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 XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
Nvidia nvcc

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

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

10.0.0*

Расширение std::make_shared() для поддержки массивов P0674R1 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 19.27*
std::span P0122R7 10 7 19.26*

10.0.0*

Календарь и timezone P0355R7 11 (частично) 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 19.29 (16.10)*
19.30**


constexpr std::vector P1004R2 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
Sun/Oracle C++
Стандартная Библиотека
Embarcadero C++ Builder
Стандартная Библиотека
Cray C++
Стандартная Библиотека

[править] Возможности C++17

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

C++17 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
(ex Portland Group/PGI)
Nvidia nvcc
Новые правила auto для прямой инициализации списком N3922 5 3.8 19.0 (2015)* Да 4.10.1 17.0 10.3 17.7 11.0
static_assert без сообщения N3928 6 2.5 19.10* Да 4.12 18.0 10.3 17.7 11.0
typename в параметре шаблона шаблона N4051 5 3.5 19.0 (2015)* Да 4.10.1 17.0 10.3 17.7 Да*
Удалены триграфы N4086 5 3.5 16.0* Да 5.0 10.3 19.1 11.0
Определение вложенного пространства имён N4230 6 3.6 19.0 (Обновление 3)* Да 4.12 17.0 10.3 17.7 11.0
Атрибуты для пространств имён и перечислителей N4266 4.9 (частично)*
6
3.6 19.0 (2015)* Да 4.11 17.0 10.3 17.7 11.0
символьные литералы u8 N4267 6 3.6 19.0 (2015)* Да 4.11 17.0 10.3 17.7 11.0
Разрешено константное вычисление для всех аргументов шаблона, не являющихся типом N4268 6 3.6 19.12* Да 5.0 19.0.1 10.3 19.1 11.0
Выражения Свёртки N4295 6 3.6 19.12* Да 4.14 19.0 10.3 18.1 11.0
Унарные выражения свёртки и пустые пакеты параметров P0036R0 6 3.9 19.12* Да 4.14 10.3 19.1 11.0
Удалено Устаревшее Использование Ключевого Слова register P0001R1 7 3.8 19.11* Да 4.13 18.0 10.3 17.7 11.0
Удалён Устаревший operator++(bool) P0002R1 7 3.8 19.11* Да 4.13 18.0 10.3 17.7 11.0
Спецификации исключений сделаны частью системы типов P0012R1 7 4 19.12* Да 4.14 19.0 10.3 19.1 11.0
Агрегированная инициализация классов базовыми классами P0017R1 7 3.9 19.14* Да 5.0 19.0.1 10.3 19.1 11.0
__has_include в условных выражениях препроцессора P0061R1 5 Да 19.11* Да 4.13 18.0 10.3 17.7 11.0
DR: Новая спецификация для наследования конструкторов (DR1941 и другие) P0136R1 7 3.9 19.14* Да 6.1 10.3 19.1 11.0
Лямбда-захват *this P0018R3 7 3.9 19.11* Да 4.14 19.0 10.3 18.1 11.0
Прямая инициализация перечислений списком P0138R2 7 3.9 19.11* Да 4.14 18.0 10.3 19.1 11.0
лямбда-выражения constexpr P0170R1 7 5 19.11* Да 4.14 19.0 10.3 18.1 11.0
Различные начальные и конечные типы в основанном на диапазоне for P0184R0 6 3.9 19.10* Да 4.12 18.0 10.3 17.7 11.0
[[fallthrough]] атрибут P0188R1 7 3.9 19.10* Да 4.13 18.0 10.3 17.7 11.0
[[nodiscard]] атрибут P0189R1 7 3.9 19.11* Да 4.13 18.0 10.3 17.7 11.0
[[maybe_unused]] атрибут P0212R1 7 3.9 19.11* Да 4.13 18.0 10.3 17.7 11.0
Шестнадцатеричные литералы с плавающей запятой P0245R1 3.0 Да 19.11* Да 4.13 18.0 10.3 17.7 11.0
Использование атрибутов пространств имён без повторения P0028R4 7 3.9 19.11* Да 4.13 18.0 10.3 17.7 11.0
Распределение динамической памяти для выровненных данных P0035R4 7 4 19.12*

10.0.0*

4.14 19.0 10.3 19.1 11.0
Вывод аргументов шаблона класса P0091R3 7 5 19.14* Да 5.0 19.0.1 10.3 19.1 11.0
Параметры шаблона не типы с типом auto P0127R2 7 4 19.14* Да 5.0 19.0.1 10.3 19.1 11.0
Гарантированный пропуск копирования P0135R1 7 4 19.13* Да 5.0 19.0.1 10.3 19.1 11.0
Замена объектов класса, содержащих ссылочные элементы P0137R1 7 6 19.14* Да 5.0 10.3 19.1 11.0
Более строгий порядок вычисления выражений P0145R3 7 4 19.14* Да 5.0 19.0.1 10.3 19.1 11.0
Структурные Привязки P0217R3 7 4 19.11* Да 4.14 19.0 10.3 18.1 11.0*
Игнорирование неизвестных атрибутов P0283R2 Да 3.9 19.11* Да 4.13 18.0 10.3 17.7 11.0
инструкция constexpr if P0292R2 7 3.9 19.11* Да 4.14 19.0 10.3 18.1 11.0
инструкции инициализации для if и switch P0305R1 7 3.9 19.11* Да 4.14 18.0 10.3 18.1 11.0
Встраиваемые переменные P0386R2 7 3.9 19.12* Да 4.14 19.0 10.3 18.1 11.0
Удалены спецификации динамических исключений P0003R5 7 4 19.10* Да 4.14 19.0 10.3 19.1 11.0
Расширения упаковывания в using-объявлениях P0195R2 7 4 19.14* Да 5.0 19.0 10.3 19.1 11.0
DR: Сопоставление шаблонных аргументов шаблона исключает совместимые шаблоны P0522R0 7 4 19.12* Да 5.0 19.0.1 10.3 19.1 11.0
C++17 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
Nvidia nvcc

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

C++17 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Intel Parallel STL
Sun/Oracle C++
Стандартная Библиотека
Embarcadero C++ Builder
Стандартная Библиотека
Cray C++
Стандартная Библиотека
std::void_t N3911 6 3.6 19.0 (2015)* Да Н/Д 10.3
std::uncaught_exceptions() N4259 6 3.7 19.0 (2015)* Да Н/Д
std::size(), std::empty() и std::data() N4280 6 3.6 19.0 (2015)* Да Н/Д 10.3
Улучшение std::pair и std::tuple N4387 6 4 19.0 (Обновление 2)* Да Н/Д 10.3
std::bool_constant N4389 6 3.7 19.0 (2015)* Да Н/Д 10.3
std::shared_mutex (безвременный) N4508 6 3.7 19.0 (Обновление 2)* Да Н/Д 10.3
Свойства типов шаблонов переменных P0006R0 7 3.8 19.0 (Обновление 2)* Да Н/Д 10.3
Свойства типа логического оператора P0013R1 6 3.8 19.0 (Обновление 2)* Да Н/Д 10.3
Стандартизация Параллелизма TS P0024R2 9* 19.14* 18.0*
std::clamp() P0025R0 7 3.9 19.0 (Обновление 3)*

10.0.0*

Н/Д 10.3
Аппаратный интерфейс размера P0154R1 12 19.11* Н/Д 10.3
(nothrow-)заменяемые свойства P0185R1 7 3.9 19.0 (Обновление 3)*

10.0.0*

Н/Д 10.3
Библиотека файловой системы P0218R1 8 7 19.14*

11.0.0*

Н/Д 10.3
std::string_view N3921
P0220R1
7 4 19.10*

10.0.0*

Н/Д 10.3
std::any P0220R1 7 4 19.10*

10.0.0*

Н/Д 10.3
std::optional P0220R1 7 4 19.10*

10.0.0*

Н/Д 10.3
Полиморфные ресурсы памяти P0220R1 9 19.13* Н/Д 10.3
Математические специальные функции P0226R1 7 19.14* Н/Д 10.3
C++17 должен ссылаться на C11 вместо C99 P0063R3 9 7 19.0 (2015)*
(частично)*

10.0.0*

Н/Д
Сращивание Карт и Наборов P0083R3 7 8 19.12*

10.0.0*

Н/Д
std::variant P0088R3 7 4 19.10*

10.0.0*

Н/Д 10.3
std::make_from_tuple() P0209R2 7 3.9 19.10* Да Н/Д 10.3
std::has_unique_object_representations P0258R2 7 6 19.11* Да Н/Д 10.3
std::gcd() и std::lcm() P0295R0 7 4 19.11* Да Н/Д 10.3
std::not_fn P0005R4
P0358R1
7 3.9 19.12* Да Н/Д 10.3
Элементарные строковые преобразования, включая поддержку значений FP (Плавающая Запятая) P0067R5 8 (нет FP)
11
7 (нет FP) 19.14* (нет FP)*
19.24*

10.0.0* (нет FP)

Н/Д 10.3 (нет FP from_chars)
std::shared_ptr и std::weak_ptr с поддержкой массива P0414R2 7 11 19.12*

12.0.0*

Н/Д 10.3
std::scoped_lock P0156R2 7 5 19.11* Да Н/Д 10.3
std::byte P0298R3 7 5 19.11* Да Н/Д 10.3
std::is_aggregate LWG2911 7 5 19.15* Да Н/Д 10.3
C++17 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Параллельная Intel STL
Sun/Oracle C++
Стандартная Библиотека
Embarcadero C++ Builder
Стандартная Библиотека
Cray C++
Стандартная Библиотека

[править] Возможности C++14

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

C++14 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
(ex Portland Group/PGI)
Nvidia nvcc
Изменена формулировка для контекстных преобразований N3323 4.9 3.4 18.0* Да 4.9 16.0 13.1.2* 5.15 10.3 8.6 16.1 9.0
Двоичные литералы N3472 4.3 (GNU)
4.9
2.9 19.0 (2015)* Да 4.10 11.0 13.1.2* 5.14 10.3 8.6 2015 9.0
decltype(auto), Вывод типа возвращаемого значения для обычных функций N3638 4.8 (частично)*
4.9
3.3 (частично)*
3.4
19.0 (2015)* Да 4.9 15.0 13.1.2* 5.15 10.3 8.6 16.1 9.0
Инициализированные/Обобщенные лямбда-захваты (инициализация захвата) N3648 4.5 (partial)
4.9
3.4 19.0 (2015)* Да 4.10 15.0 16.1.1* 5.15 10.3 8.6 16.1 9.0
Общие лямбда-выражения N3649 4.9 3.4 19.0 (2015)* Да 4.10 16.0 13.1.2* 5.15 10.3 8.6 16.1 9.0
Шаблоны переменных N3651 5 3.4 19.0 (Обновление 2)* Да 4.11 17.0 13.1.2* 5.15 10.3 8.6 17.4 9.0
Расширенный constexpr N3652 5 3.4 19.10* Да 4.11 17.0 13.1.2* 5.15 10.3 8.6 17.4 9.0
Агрегаты с инициализаторами элементов (NSDMI) N3653 5 3.3 19.10* Да 4.9 16.0 16.1.1* 5.14 10.3 8.6 16.1 9.0
Пропуск/расширение выделения памяти N3664 Н/Д 3.4 Н/Д Да Н/Д Н/Д 10.3 8.6 17.4
атрибут [[deprecated]] N3760 4.9 3.4 19.0 (2015)* Да 4.9 15.0*
16.0
13.1.2* 5.14 10.3 8.6 16.1 9.0
Освобождение по размеру N3778 5 3.4 19.0 (2015)* Да 4.10.1 17.0 5.14 10.3 8.6 16.1
Одиночная кавычка как разделитель цифр N3781 4.9 3.4 19.0 (2015)* Да 4.10 16.0 13.1.2* 5.14 10.3 8.6 2015 9.0
C++14 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
Nvidia nvcc

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

C++14 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
Стандартная Библиотека
Embarcadero C++ Builder
Стандартная Библиотека
Cray C++
Стандартная Библиотека
constexpr для <complex> N3302 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
Прозрачные функторы операторов N3421 4.9 3.4 18.0* Да 5.15 10.3 8.6
std::result_of и SFINAE N3462 5 Да 19.0 (Обновление 2)* Да 5.15 10.3 8.6
constexpr для <chrono> N3469 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
constexpr для <array> N3470 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
constexpr для <initializer_list>, <utility> и <tuple> N3471 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
Улучшенная std::integral_constant N3545 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
Пользовательские литералы для <chrono> и <string> N3642 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
Null прямые итераторы N3644 5 (частично)
10
3.4 19.0 (2015)* Да 5.15 10.3 8.6
std::quoted N3654 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
std::make_unique N3656 4.9 3.4 18.0* Да 5.15 10.3 8.6
Гетерогенный ассоциативный поиск N3657 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
std::integer_sequence N3658 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
std::shared_timed_mutex N3659 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
std::exchange N3668 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
исправление функций-элементов constexpr без const N3669 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
std::get<T>() N3670 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
Двухдиапазоные std::equal, std::is_permutation, std::mismatch N3671 5 3.4 19.0 (2015)* Да 5.15 10.3 8.6
C++14 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
Стандартная Библиотека
Embarcadero C++ Builder
Стандартная Библиотека
Cray C++
Стандартная Библиотека

[править] Возможности C++11

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

C++11 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
(ex Portland Group/PGI)
Nvidia nvcc
HP aCC
Digital Mars C++
C99 препроцессор N1653 4.3 Да 19.0 (2015)* (частично)*
19.26*
Да 4.1 11.1 10.1 5.9 Да 8.4 2015 7.0 A.06.25 Да
static_assert N1720 4.3 2.9 16.0* Да 4.1 11.0 11.1 5.13 Да 8.4 2015 7.0 A.06.25 8.52
Правые угловые скобки N1757 4.3 Да 14.0* Да 4.1 11.0 12.1 5.13 Да 8.4 2015 7.0
Расширенные friend объявления N1791 4.7 2.9 16.0* (частично)
18.0*
Да 4.1 11.1*
12.0
11.1 5.13 Да 8.4 2015 7.0 A.06.25
long long N1811 Да Да 14.0* Да Да Да Да Да Да 8.4 2015 7.0 Да Да
Поддержка компилятором свойств типа N1836 4.3 3.0 14.0* Да 4.0 10.0 13.1.3 5.13 Да 8.4 2015 6.16
auto N1984 4.4 Да 16.0* Да 3.9 11.0 (v0.9)
12.0
11.1 5.13 Да 8.4 2015 7.0 A.06.25
Делегирование конструкторов N1986 4.7 3.0 18.0* Да 4.7 14.0 11.1 5.13 Да 8.4 2015 7.0 A.06.28
внешний шаблон N1987 3.3 Да 12.0* Да 3.9 9.0 11.1 5.13 Да 8.4 2015 7.0 A.06.25
constexpr N2235 4.6 3.1 19.0 (2015)* Да 4.6 13.0*
14.0
12.1*
13.1
5.13 Да 8.4 2015 7.0 A.06.28
Псевдонимы шаблонов N2258 4.7 3.0 18.0* Да 4.2 12.1 13.1.1* 5.13 Да 8.4 2015 7.0 A.06.27
char16_t и char32_t N2249 4.4 2.9 19.0 (2015)* Да 4.4 12.1*
14.0
13.1.1* 5.13 Да 8.4 2015 7.0 A.06.27 8.52
alignas N2341 4.8 3.0 19.0 (2015)* Да 4.8 15.0 13.1.2* 5.13 Да 8.6 2015 7.0
alignof N2341 4.5 2.9 19.0 (2015)* Да 4.8 15.0 13.1.2* 5.13 Да 8.4 2015 7.0
Функции default и delete N2346 4.4 3.0 18.0* Да 4.1 12.0 13.1 5.13 Да 8.4 2015 7.0 A.06.25
Строго типизированный enum N2347 4.4 2.9 17.0* Да 4.0 13.0 12.1 5.13 Да 8.4 2015 7.0 A.06.25
Атомарные операции N2427 4.4 3.1 17.0* Да Да 13.0 13.1.2* 5.14 Да 8.4 2015
nullptr N2431 4.6 2.9 16.0* Да 4.2 12.1 13.1 5.13 Да 8.4 2015 7.0 A.06.27 8.52
Явные операторы преобразования N2437 4.5 3.0 18.0* Да 4.4 13.0 12.1 5.13 Да 8.4 2015 7.0 A.06.27
ссылочные квалификаторы N2439 4.8.1 2.9 19.0 (2015)* Да 4.7 14.0 13.1.2* 5.13 Да 8.4 2015 7.0 A.06.28
Строковые литералы Юникода N2442 4.4 3.0 19.0 (2015)* Да 4.7 11.0* 10.1*
13.1.1*
5.7 Да 8.4 2015 7.0 A.06.28 8.52
Сырые строковые литералы N2442 4.5 Да 18.0* Да 4.7 14.0 13.1.1*, исключая AIX xlC 13.1.3 5.13 Да 8.4 2015 7.0 A.06.28 8.52
Встроенные пространства имён N2535 4.4 2.9 19.0 (2015)* Да 4.5 14.0 11.1 5.13 Да 8.4 2015 7.0 A.06.28
Наследование конструкторов N2540 4.8 3.3 19.0 (2015)* Да 4.8 15.0 13.1.1* 5.13 Да 8.4 2015 7.0
Типы возвращаемых значений конечной функции N2541 4.4 2.9 16.0* Да 4.1 12.0 12.1 5.13 Да 8.4 2015 7.0 A.06.27
Неограниченные объединения N2544 4.6 3.0 19.0 (2015)* Да 4.6 14.0* 13.1.2* 5.13 Да 8.4 2015 7.0 A.06.28
Вариативные шаблоны N2242
N2555
4.3 (N2242)
4.4
2.9 18.0* Да 4.3 (N2242)
4.3
12.1 11.1 (N2242) 5.13 Да 8.4 2015 7.0 A.06.27
Выражение SFINAE N2634 4.4 2.9 19.14* Да 4.2 12.1 Да 8.4 2015 7.0
Локальные и безымянные типы как параметры шаблона N2657 4.5 2.9 16.0* Да 4.2 12.0 13.1.2* 5.13 Да 8.4 2015 7.0 A.06.27
Локальная память потока N2659 4.4 (частично)
4.8
3.3* 16.0* (частично)
19.0 (2015)*
Да 4.8 11.1 (частично)
15.0*
10.1 (частично)*
13.1.2 (частично)*
5.9 (частично) Да 8.4 2015 8.52 (частично)
Динамическая инициализация и уничтожение с параллелизмом (магическая статика) N2660 4.3 2.9 19.0 (2015)* Да Да 11.1* 13.1.2* 5.13 Да 8.4 2015 A.06.25
Сборка Мусора и Обнаружение Утечек на Основе Доступности (поддержка библиотеки) N2670
Списки инициализаторов N2672 4.4 3.1 18.0* Да 4.5 13.0 (частично)
14.0
13.1.2* 5.13 Да 8.4 2015 7.0 A.06.28
Инициализаторы нестатических элементов данных N2756 4.7 3.0 18.0* Да 4.6 14.0 13.1.2* 5.13 Да 8.4 2015 7.0 A.06.28
Атрибуты N2761 4.8 3.3 19.0 (2015)* Да 4.2 12.1 13.1.1* 5.13 Да 8.4 2015 7.0 A.06.27
Предобъявления (непрозрачного) enum N2764 4.6 3.1 17.0* Да 4.5 11.1 (partial)
14.0
12.1 5.13 Да 8.4 2015 7.0
Пользовательские литералы N2765 4.7 3.1 19.0 (2015)* Да 4.8 15.0 13.1.2* 5.14 Да 8.4 2015 7.0
Ссылки rvalue N2118
N2844
CWG1138
4.3 (N2118)
4.5
2.9 16.0* (N2844)
17.0*
Да 4.5 11.1 (N2118)
12.0 (N2844)
14.0
12.1 5.13 Да 8.4 2015 7.0* A.06.25
Лямбда-выражения N2550
N2658
N2927
4.5 3.1 16.0* (N2658)
17.0*
Да 4.1 12.0 13.1.2* 5.13 Да 8.4 2015 7.0 A.06.25
Диапазонный цикл for N2930
N3271
4.6 3.0 17.0* Да 4.5 13.0 13.1.2* 5.13 Да 8.4 2015 7.0 A.06.28
noexcept N3050 4.6 3.0 19.0 (2015)* Да 4.5 14.0 13.1.1* 5.13 Да 8.4 2015 7.0 A.06.28
Специальные функции элементы перемещения по умолчанию N3053 4.6 3.0 19.0 (2015)* Да 4.5 14.0 5.13 Да 8.4 2015 7.0 A.06.25
override и final N2928
N3206
N3272
4.7 2.9 14.0* (частично)
17.0*
Да 4.8 12.0 (N2928)
14.0
13.1.1* 5.13 Да 8.4 2015 7.0
decltype N2343
N3276
4.3 (N2343)
4.8.1
2.9 16.0* Да 4.2 (N2343)
4.8
11.0 (N2343)
12.0
11.1 (N2343) 5.13 Да 8.4 2015 7.0 A.06.25 8.52 (N2343)
C++11 возможность
 
Страница(цы)
 
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
IBM XLC++
Sun/Oracle C++
Embarcadero C++ Builder
Cray
Nvidia HPC C++
Nvidia nvcc
HP aCC
Digital Mars C++

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

C++11 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
Стандартная Библиотека
Embarcadero C++ Builder
Стандартная Библиотека
Cray C++
Стандартная Библиотека
Свойства типов N1836 4.3 3.0 14.0* Да 5.13 Да 8.4
Сборка Мусора и Обнаружение Утечек на Основе Доступности (поддержка библиотеки) N2670 6
(no-op)
3.4
(no-op)
19.0 (2015)*
(no-op)
Да
(no-op)
Денежные, Временные и шестнадцатеричные с плавающей запятой манипуляторы ввода/вывода N2071
N2072
5 3.8 19.0 (2015)* Да 5.15
Запрещение COW (copy-on-write – копирование при записи) строки N2668 5 Да Да Да Да
C++11 возможность
 
Страница(цы)
 
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang
Sun/Oracle C++
Стандартная Библиотека
Embarcadero C++ Builder
Стандартная Библиотека
Cray C++
Стандартная Библиотека

* - наведите указатель мыши на номер версии, чтобы увидеть примечания

[править] Ссылки

Шаблон:cpp/compiler support/references

X Tutup