Spec-Zone.ru › C++

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

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

Основные языковые возможности C++17

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

Предложение(я)

GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ранее PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ для AIX
DR11: Новые правила auto для прямой инициализации списком N3922 5 3.8 19.0 (2015)* Да 4.10.1 17.0 17.7 11.0 11.0 10.3 17.1.0
typename в параметре шаблона шаблона N4051 5 3.5 19.0 (2015)* Да 4.10.1 17.0 17.7 Да* 11.0 10.3 17.1.0
Удаление триграфов N4086 5 3.5 16.0* Да 5.0 19.1 11.0 11.0 10.3 17.1.0
Определение вложенных пространств имен N4230 6 3.6 19.0 (Update 3)* Да 4.12 17.0 17.7 11.0 11.0 10.3 17.1.0
static_assert без сообщения (FTM)* N3928 6 2.5 19.10* Да 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
Атрибуты пространств имен и элементов перечисления (FTM)* (FTM)* N4266 4.9 (частично)*
6
3.6 19.0 (2015)* Да 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
Символьные литералы u8 N4267 6 3.6 19.0 (2015)* Да 4.11 17.0 17.7 11.0 11.0 10.3 17.1.0
Разрешена константная оценка для всех константных аргументов шаблона (FTM)* N4268 6 3.6 19.12* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Унарные свёрточные выражения и пустые наборы параметров P0036R0 6 3.9 19.12* Да 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Удаление устаревшего использования ключевого слова register P0001R1 7 3.8 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Удаление устаревшего operator++(bool) P0002R1 7 3.8 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Включение спецификаций исключений в систему типов (FTM)* P0012R1 7 4 19.12* Да 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
__has_include в условных директивах препроцессора P0061R1 5 Да 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
DR11: Новая спецификация для наследуемых конструкторов (DR1941 и др.) (FTM)* P0136R1 7 3.9 19.14** Да 6.1 19.1 11.0 11.0 10.3 17.1.0
Агрегатные классы с базовыми классами (FTM)* P0017R1 7 3.9 19.14* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Свёрточные выражения (FTM)* N4295 6 3.6 19.12* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Захват *this лямбда-выражением (FTM)* P0018R3 7 3.9 19.11* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Прямая инициализация перечислений списком P0138R2 7 3.9 19.11* Да 4.14 18.0 19.1 11.0 11.0 10.3 17.1.0
constexpr лямбда-выражения (FTM)* P0170R1 7 5 19.11* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Различающиеся типы начала и конца в цикле for на основе диапазона (FTM)* P0184R0 6 3.9 19.10* Да 4.12 18.0 17.7 11.0 11.0 10.3 17.1.0
[[fallthrough]] атрибут P0188R1 7 3.9 19.10* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[nodiscard]] атрибут P0189R1 7 3.9 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
[[maybe_unused]] атрибут P0212R1 7 3.9 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Шестнадцатеричные литералы с плавающей точкой (FTM)* P0245R1 3.0 Да 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Использование пространств имен атрибутов без повторения P0028R4 7 3.9 19.11* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Динамическое выделение памяти для данных с увеличенным выравниванием (FTM)* P0035R4 7 4 19.12* 10.0.0* 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Константные параметры шаблонов типа auto (FTM)* P0127R2 7 4 19.14* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Гарантированное устранение копирования (FTM)* P0135R1 7 4 19.13* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Замена объектов классов, содержащих ссылочные члены P0137R1 7 6 19.14* Да 5.0 19.1 11.0 11.0 10.3 17.1.0
Более строгий порядок вычисления выражений P0145R3 7 4 19.14* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Структурированные привязки (FTM)* P0217R3 7 4 19.11* Да 4.14 19.0 18.1 11.0* 11.0 10.3 17.1.0
Игнорирование неизвестных атрибутов P0283R2 Да 3.9 19.0 (2015)* Да 4.13 18.0 17.7 11.0 11.0 10.3 17.1.0
Инструкции constexpr if (FTM)* P0292R2 7 3.9 19.11* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Инициализирующие инструкции для if и switch P0305R1 7 3.9 19.11* Да 4.14 18.0 18.1 11.0 11.0 10.3 17.1.0
Встроенные переменные (FTM)* P0386R2 7 3.9 19.12* Да 4.14 19.0 18.1 11.0 11.0 10.3 17.1.0
Удаление динамических спецификаций исключений P0003R5 7 4 19.12* Да 4.14 19.0 19.1 11.0 11.0 10.3 17.1.0
Развёртывание пакетов в using-объявлениях (FTM)* P0195R2 7 4 19.14* Да 5.0 19.0 19.1 11.0 11.0 10.3 17.1.0
DR98: При сопоставлении аргументов шаблонов шаблонов исключаются совместимые шаблоны (FTM)* P0522R0 7 4 19.12* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0
Вывод аргументов шаблона класса (FTM)* P0091R3 7 5 19.14* Да 5.0 19.0.1 19.1 11.0 11.0 10.3 17.1.0


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


Предложение(я)
GCC
Clang
MSVC
Apple Clang
EDG eccp
Intel C++
Nvidia HPC C++ (ранее PGI)*
Nvidia nvcc
Cray
Embarcadero C++ Builder
IBM Open XL C++ для AIX

Библиотечные возможности C++17

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

Документ(ы)

GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ для AIX*
Intel Parallel STL
Embarcadero C++ Builder*
std::void_t (FTM)* N3911 6.1 3.6 19.0 (2015)* Да 17.1.0 Н/Д 10.3
std::uncaught_exceptions() (FTM)* N4259 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д 10.3
std::size(), std::empty() и std::data() (FTM)* N4280 6 3.6 19.0 (2015)* Да 17.1.0 Н/Д 10.3
std::allocator_traits::is_always_equal, исправления noexcept (FTM)* N4258 6.1 3.7 19.0 (2015)* 17.1.0 Н/Д
std::invoke (FTM)* N4169 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д
std::map::try_emplace, std::map::insert_or_assign (FTM)* N4279 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д
std::unordered_map::try_emplace, std::unordered_map::insert_or_assign (FTM)* N4279 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д
Улучшение std::pair и std::tuple N4387 6.1 4 19.0 (обновление 2)* Да 17.1.0 Н/Д 10.3
std::bool_constant (FTM)* N4389 6.1 3.7 19.0 (2015)* Да 17.1.0 Н/Д 10.3
std::shared_mutex (без тайм-аута) (FTM)* N4508 6 3.7 19.0 (обновление 2)* Да 17.1.0 Н/Д 10.3
Минимальная поддержка неполных типов для std::forward_list, std::list и std::vector (FTM)* N4510 3.0 3.6 18.0* Да 17.1.0 Н/Д
Трейты типов в виде шаблонов переменных (FTM)* P0006R0 7.1 3.8 19.0 (обновление 2)* Да 17.1.0 Н/Д 10.3
Трейты логических операторов (FTM)* P0013R1 6.1 3.8 19.0 (обновление 2)* Да 17.1.0 Н/Д 10.3
std::as_const (FTM)* P0007R1 7.1 3.8 19.0 (обновление 2)* Да 17.1.0 Н/Д
Функции округления для std::chrono::duration и std::chrono::time_point (FTM)* P0092R1 7.1 3.8 19.0 (обновление 2)* Да 17.1.0 Н/Д
Прозрачные std::owner_less (std::owner_less<void>) (FTM)* P0074R0 7.1 3.8 19.0 (обновление 2)* Да 17.1.0 Н/Д
std::not_fn (FTM)* P0005R4
P0358R1
7.1 3.9 19.12* Да 17.1.0 Н/Д 10.3
Параллельные алгоритмы и политики выполнения (FTM)* (FTM)* P0024R2 9* 17
(частично)*
19.14* 18.0*
std::clamp() (FTM)* P0025R1 7 3.9 19.0 (обновление 3)* 10.0.0* 17.1.0 Н/Д 10.3
Трейты (не)выбрасывающей замены (FTM)* P0185R1 7.1* 3.9 19.0 (обновление 3)* 10.0.0* 17.1.0 Н/Д 10.3
Полиморфные ресурсы памяти (FTM)* P0220R1 9.1 16 19.13* 15.0.0* 17.1.1 Н/Д 10.3
std::apply (FTM)* P0220R1 7.1 16 19.13* Да 17.1.0 Н/Д
Поисковые объекты (FTM)* P0220R1 7.1 16 19.13* Да 17.1.0 Н/Д
std::sample (FTM)* P0220R1 7.1 16 19.13* Да 17.1.0 Н/Д
Специальные математические функции (FTM)* P0226R1 7 19.14* 17.1.1 Н/Д 10.3
constexpr std::addressof (FTM)* LWG2296 7.1 Да 19.0 (обновление 3)* 17.1.0 Н/Д
constexpr для std::reverse_iterator, std::move_iterator, std::array и доступа к диапазонам (FTM)* P0031R0 7.1 4 19.11* Да 17.1.0 Н/Д
constexpr std::atomic<T>::is_always_lock_free (FTM)* P0152R1 7.1 3.9 19.11* Да 17.1.0 Н/Д
std::enable_shared_from_this::weak_from_this (FTM)* P0033R1 7.1 3.9 19.12* Да 17.1.0 Н/Д
3-аргументная перегрузка std::hypot (FTM)* P0030R1 7.1 3.9 19.14* Да 17.1.0 Н/Д
std::byte (FTM)* P0298R3 7 5 19.11* Да 17.1.1 Н/Д 10.3
std::string_view (FTM)* N3921
P0220R1
P0254R2
P0403R1
7.1 4 19.10* (частично)*
19.11**
10.0.0* 17.1.0 Н/Д 10.3
std::any (FTM)* P0220R1
P0032R3
7.1 4 19.10* 10.0.0* 17.1.0 Н/Д 10.3
std::optional (FTM)* P0220R1 7.1 4 19.10* 10.0.0* 17.1.0 Н/Д 10.3
Основная часть стандартной библиотеки C11 P0063R3 9.1 7 19.0 (2015)*
(частично)*
10.0.0* 17.1.1 Н/Д
Извлечение узлов из Maps и Sets (FTM)* P0083R3 7 8 19.12* 10.0.0* 17.1.1 Н/Д
Тип возвращаемого значения функций emplace* некоторых контейнеров изменен с void на ссылку P0084R2 7.1 4.0 19.11* Да 17.1.0 Н/Д
std::variant (FTM)* P0088R3 7.1 4 19.10* 10.0.0* 17.1.0 Н/Д 10.3
std::make_from_tuple() (FTM)* P0209R2 7.1 3.9 19.10* Да 17.1.0 Н/Д 10.3
std::has_unique_object_representations (FTM)* P0258R2 7.1 6 19.11* Да 17.1.1 Н/Д 10.3
std::gcd() и std::lcm() (FTM)* P0295R0 7 4 19.11* Да 17.1.0 Н/Д 10.3
Проблема CWG 1776: замена объектов классов, содержащих ссылочные члены (std::launder) (FTM)* P0137R1 7.1 6 19.14* Да 17.1.0 Н/Д
Расширение средств управления памятью (FTM)* P0040R3 7.1 4 (частично)* 19.11* 17.1.0 Н/Д
shared_ptr::weak_type (FTM)* P0163R0 7.1 3.9 19.10* Да 17.1.0 Н/Д
Базовые преобразования строк: std::to_chars / std::from_chars (FTM)* P0067R5 8*
11
7*
14*
20*
19.14**
19.24*
10.0.0** 17.1.1* Н/Д 10.3*
std::shared_ptr и std::weak_ptr с поддержкой массивов P0414R2 7 11 19.12* 12.0.0* 17.1.1 Н/Д 10.3
Constexpr для всех функций-членов std::chrono::duration и std::chrono::time_point (FTM)* P0505R0 7.1 4 19.11* Да 17.1.1 Н/Д
std::shared_ptr<T[]> (FTM)* P0497R0 7.1 11 19.12* 17.1.1 Н/Д
constexpr std::char_traits (FTM)* P0426R1 8.1 4 19.14* Да 17.1.1 Н/Д
Библиотека файловой системы (std::filesystem) (FTM)* P0218R1
P0219R1
8 7 19.14* 11.0.0* 17.1.1 Н/Д 10.3
Размер аппаратной интерференции (FTM)* P0154R1 12.1 15 (частичная поддержка)*
19
19.11* Н/Д 10.3
std::scoped_lock (FTM)* P0156R2 7 5 19.11* Да 17.1.1 Н/Д 10.3
std::is_aggregate (FTM)* LWG2911 7 5 19.15* Да 17.1.1 Н/Д 10.3
std::is_invocable, std::invoke_result (FTM)* P0604R0 7.1 Да 19.11* Да 17.1.1 Н/Д
DR17: std::hash<std::filesystem::path> LWG3657 11.4 17 19.32* Н/Д


Функция C++17


Документ(ы)
GCC libstdc++
Clang libc++
MSVC STL
Apple Clang*
IBM Open XL C/C++ for AIX*
Intel Parallel STL
Embarcadero C++ Builder*
Примечания
  • По состоянию на 20.11.2020 последняя версия Oracle Developer Studio — 12.6. В её документации C++17 не упоминается.
  • Компилятор Cray может поддерживать некоторые функции начиная с версии раньше 11.0. Именно в этой версии он стал производным от Clang и получил поддержку всех языковых функций базового компилятора. См. документ Cray/HPE S-2179.

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

Spec-Zone.ru

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