exponenta event banner

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

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

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

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

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

Да
C++ 2017-N3928 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 и основной латинский Юникод. Да
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-P0088R3std::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-P0170R1constexpr Лямбда-выражения Частично поддерживается
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-P0218R1std::filesystem Нет
C++ 2017-P0220R1std::anyДа
C++ 2017-P0220R1std::optionalФункция поиска ошибок поддерживает синтаксис. Семантика поддерживается частично. Программа проверки кода не поддерживает эту функцию.
C++ 2017-P0226R1Математические специальные функцииНет
C++ 2017-P0245R1Шестнадцатеричные литералы с плавающей запятой Да
C++ 2017-P0283R2Игнорировать неизвестные атрибуты Да
C++ 2017-P0292R2constexpr если операторы Да
C++ 2017-P0298R3std::byte Да
C++ 2017-P0305R1инструкции init для if и switch Да
C++ 2017-P0386R2Встроенные переменные Нет
C++ 2017-P0522R0Вызвать частичное упорядочение, чтобы определить, является ли аргумент шаблона допустимым совпадением для параметра шаблонаЧастично поддерживается

См. также

Связанные темы