В этой таблице представлен частичный список элементов языка C++, которые были введены с C++ 17, и соответствующая поддержка Polyspace ®. Если код содержит неподдерживаемые конструкции, Polyspace сообщает об ошибке компиляции.
| C++ 17 Std Ref | Описание | Поддержанный |
|---|---|---|
| C++ 2017-N3921 | std::string-viewНаблюдать за содержанием std::string объект без владения ресурсом | Да |
| C++ 2017-N3922 |
| Да |
| C++ 2017-N3928 | static_assert объявление больше не требует второго аргумента. Призыв static_assert без сообщения теперь разрешено: static_assert(N > 0); | Да |
| C++ 2017-N4051 | C++ имеет шаблоны, которые не являются template <template <typename> typename Tmpl> struct X; | Да |
| C++ 2017-N4086 | Начиная с C++ 17, триграфы больше не поддерживаются. | Нет |
| C++ 2017-N4230 | Начиная с C++ 17, используйте полное имя в определении пространства имен для определения сразу нескольких вложенных пространств имен. Например, эти фрагменты кода эквивалентны:
| Да |
| 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 и основной латинский Юникод. | Да |
| C++ 2017-N4268 | Разрешить постоянную оценку нетипных аргументов шаблона. | Да |
| C++ 2017-N4295 | Разрешить сворачивание выражений | Да |
| C++ 2017-N4508 | Разрешить несинхронизированные std::shared_mutex
| Использование std::shared_mutex не приводит к ошибке компиляции. Polyspace не поддерживает совместное использование объектов mutex с помощью std::shared_mutex. |
| C++ 2017-P0001R1 | Удалите использование register ключевое слово | Да |
| C++ 2017-P0002R1 | Удалить operator++(bool)
| Да |
| C++ 2017-P0003R5 | Удаление устаревших спецификаций исключений с помощью throw(<>)
| Средство поиска ошибок удаляет спецификацию исключения, указанную с помощью throw() заявления. Средство проверки кода вызывает ошибку компиляции, когда 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-P0088R3 | std::variant | Частично поддерживается. |
| C++ 2017-P0091R3 | Вычет аргумента шаблона для шаблонов классов | Частично поддерживается. |
| C++ 2017-P0127R2 | Нетипные параметры шаблона, имеющие автоматический тип | Да |
| C++ 2017-P0135R1 | Гарантированная редакция копии | Частично поддерживается. |
| C++ 2017-P0136R1 | Новая спецификация для наследования конструкторов | Нет |
| C++ 2017-P0137R1 | Замена объектов класса, содержащих ссылочные элементы | Да |
| C++ 2017-P0138R2 | Прямая инициализация списка перечислений | Да |
| C++ 2017-P0145R3 | Более строгий порядок вычисления выражения | Новый синтаксис/ключевое слово не вводится и поэтому не влияет на поддержку Polyspace для C++ 17. |
| C++ 2017-P0154R1 | Размер аппаратных помех | Поддерживается компилятором Visual Studio |
| C++ 2017-P0170R1 | constexpr Лямбда-выражения | Частично поддерживается |
| C++ 2017-P018R0 | Различные типы начала и конца в зависимости от диапазона for петли | Да |
| C++ 2017-P0188R1 | [[fallthrough]] признак | Да |
| C++ 2017-P0189R1 | [[nodiscard]] признак | Да |
| C++ 2017-P0195R2 | Упаковать расширения в объявления use-declarations | Да |
| C++ 2017-P0212R1 | [[maybe_unused]] признак | Да |
| C++ 2017-P0217R3 | Структурированные привязки | Polyspace не поддерживает привязку с помощью значения rvalue. |
| C++ 2017-P0218R1 | std::filesystem | Нет |
| C++ 2017-P0220R1 | std::any | Да |
| C++ 2017-P0220R1 | std::optional | Функция поиска ошибок поддерживает синтаксис. Семантика поддерживается частично. Программа проверки кода не поддерживает эту функцию. |
| C++ 2017-P0226R1 | Математические специальные функции | Нет |
| C++ 2017-P0245R1 | Шестнадцатеричные литералы с плавающей запятой | Да |
| C++ 2017-P0283R2 | Игнорировать неизвестные атрибуты | Да |
| C++ 2017-P0292R2 | constexpr если операторы | Да |
| C++ 2017-P0298R3 | std::byte
| Да |
| C++ 2017-P0305R1 | инструкции init для if и switch | Да |
| C++ 2017-P0386R2 | Встроенные переменные | Нет |
| C++ 2017-P0522R0 | Вызвать частичное упорядочение, чтобы определить, является ли аргумент шаблона допустимым совпадением для параметра шаблона | Частично поддерживается |
C++ standard version (-cpp-version)