C++ 17 элементов языка, поддержанных в Polyspace

Эта таблица предоставляет частичный список элементов языка C++, которые были введены начиная с C++ 17 и его соответствующая поддержка Polyspace®. Если ваш код содержит неподдерживаемые конструкции, Polyspace сообщает об ошибке компиляции.

C++ 17 станд. касательноОписаниеПоддерживаемый
2017-N3921 C++std::string-view: Наблюдайте содержимое std::string объект, не владея ресурсомДа
2017-N3922 C++
  • Когда используется в инициализации списка копии, auto выводит тип, чтобы быть std::initializer_list если элементы списка инициализаторов имеют идентичный тип. В противном случае, auto вычет плохо формируется.

  • При использовании прямой инициализации списка с заключенным в фигурные скобки списком инициализаторов, содержащим один элемент, auto выводит тип из того элемента.

  • При использовании прямой инициализации списка с заключенным в фигурные скобки списком инициализаторов, содержащим больше, чем один элемент, auto вычет типа плохо формируется.

Да
2017-N3928 C++static_assert объявление больше не требует второго аргумента. Вызов static_assert без сообщения теперь позволен: static_assert(N > 0);Да
2017-N4051 C++

C++ имеет шаблоны, которые не являются class шаблоны, такие как шаблон, который берет шаблоны в качестве аргумента. Ранее объявление таких параметров шаблона шаблона потребовало использования class ключевое слово. На C++ 17, можно использовать typename при объявлении параметров шаблона шаблона, таких как:

template <template <typename> typename Tmpl> struct X;
Да
2017-N4086 C++Начиная на C++ 17, trigraphs больше не поддерживаются.Нет
2017-N4230 C++

При запуске на C++ 17, используйте полностью определенное имя в определении пространства имен, чтобы задать несколько вложенных пространств имен целиком. Например, эти фрагменты кода эквивалентны:

  • namespace base::derived{
    //..
    }
  • namespace {
        namespace derived{
            //...
        }
    }

Да
2017-N4259 C++Функциональный std::uncaught_exceptions введен на C++ 17, который возвращает количество исключений в вашем коде, которые не обработаны. Функциональный std:uncaught_exception, то, которое возвращает булево значение, удерживается от использования.Да
2017-N4266 C++Начиная на C++ 17, пространства имен и перечислители могут быть аннотированы атрибутами к, позволяет более ясную коммуникацию намерения разработчика.Да
2017-N4267 C++Начиная на C++ 17, префиксный u8 поддерживается. Этот префикс создает символьный литерал UTF-8. Значение символьного литерала UTF-8 равно своему значению кодовой точки ISO 10646, если значение кодовой точки находится в блоке C0 Controls и Basic Latin Unicode. Да
2017-N4268 C++Позвольте постоянную оценку аргументов шаблона нетипа.Да
2017-N4295 C++Позвольте выражения сгиба Да
2017-N4508 C++Позвольте несинхронизированный std::shared_mutex Использование std::shared_mutex не вызывает ошибку компиляции. Polyspace не поддерживает совместное использование взаимоисключающих объектов при помощи std::shared_mutex.
2017-P0001R1 C++ Удалите использование register ключевое слово Да
2017-P0002R1 C++Удалите operator++(bool) Да
2017-P0003R5 C++ Удалите удержанные от использования технические требования исключения при помощи throw(<>) Bug Finder удаляет спецификацию исключения, заданную при помощи throw() операторы. Программа автоматического доказательства кода повышает ошибку компиляции когда throw() операторы присутствуют на C++ 17 кодов.
2017-P0012R1 C++Сделайте часть технических требований исключения системы типов Да
2017-P0017R1 C++ Совокупная инициализация классов с базовыми классами Да
2017-P0018R3 C++ Позвольте получать указатель *this в Лямбда-выраженияхДа
2017-P0024R2 C++Стандартизация технической характеристики C++ для Расширения для ПараллелизмаPolyspace поддерживает эту функцию, когда вы используете Визуальное 15.x и Intel C++ 18,0 компиляторов.
2017-P002842 C++Используя пространства имен атрибута без повторенияДа
2017-P0035R4 C++Динамическое выделение памяти для сверхвыровненных данныхДа
2017-P0036R0 C++Унарные выражения сгиба и пустые пакеты параметраДа
2017-P0061R1 C++ Использование __has_include в условных выражениях препроцессора Да
2017-P0067R5 C++ Элементарные преобразования строк Нет
2017-P0083R3 C++Соединение карт и наборовPolyspace поддерживает эту функцию, когда компилятор, который вы используете также, поддерживает эту функцию. Например, Polyspace поддерживает эту функцию, когда вы используете g ++ в качестве компилятора.
2017-P0088R3 C++std::variantЧастично поддерживаемый.
2017-P0091R3 C++ Вычет аргумента шаблона за шаблоны классов Частично поддерживаемый.
2017-P0127R2 C++Не введите параметры шаблона, которые имеют автоматический типДа
2017-P0135R1 C++Гарантируемая копия elision Частично поддерживаемый.
2017-P0136R1 C++ Новая спецификация для наследования конструкторовНет
2017-P0137R1 C++ Замена объектов класса, содержащих ссылочные члены Да
2017-P0138R2 C++ Прямая инициализация списка перечислений Да
2017-P0145R3 C++ Более строгий порядок вычисления выражения Никакой новый синтаксис/ключевое слово не введен и поэтому не влияет на поддержку Polyspace C++ 17.
2017-P0154R1 C++ Аппаратный размер интерференции Поддерживаемый с компилятором Visual Studio
2017-P0170R1 C++ constexpr Лямбда-выражения Частично поддерживаемый
2017-P018R0 C++Отличие начинает и заканчивает типы в основанном на области значений for циклыДа
2017-P0188R1 C++[[fallthrough]] атрибутДа
2017-P0189R1 C++ [[nodiscard]] атрибут Да
2017-P0195R2 C++ Упакуйте расширения в объявлениях использования Да
2017-P0212R1 C++ [[maybe_unused]] атрибут Да
2017-P0217R3 C++ Структурированная привязка Polyspace не поддерживает привязку при помощи rvalue.
2017-P0218R1 C++ std::filesystem Нет
2017-P0220R1 C++std::anyДа
2017-P0220R1 C++std::optionalBug Finder поддерживает синтаксис. Семантика частично поддерживается. Программа автоматического доказательства кода не поддерживает эту функцию.
2017-P0226R1 C++Математические специальные функцииНет
2017-P0245R1 C++ Шестнадцатеричные литералы с плавающей точкой Да
2017-P0283R2 C++ Проигнорируйте неизвестные атрибуты Да
2017-P0292R2 C++ constexpr операторы if Да
2017-P0298R3 C++ std::byte Да
2017-P0305R1 C++ init-операторы, для если и переключатель Да
2017-P0386R2 C++ Встроенные переменные Нет
2017-P0522R0 C++ Вызовите частичное упорядоченное расположение, чтобы определить, когда аргумент шаблона шаблона будет допустимым соответствием для параметра шаблонаЧастично поддерживаемый

Смотрите также

Похожие темы