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

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

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

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

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

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

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

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

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

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

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

См. также

Похожие темы