AUTOSAR C++ 14 правил A7-1-6

Спецификатор определения типа не должен использоваться

Описание

Управляйте определением

Спецификатор определения типа не должен использоваться.

Объяснение

Синтаксис using является лучшей альтернативой typedef-s для определения псевдонимов.

Начиная с C++ 11, синтаксис using позволяет, вы к шаблону define искажаете, где аргументы шаблона не связаны с типом данных. Например, следующие операторы задают псевдоним vectorType для vector, где аргумент T не связывают с типом данных и можно заменить позже:

template<class T, class Allocator = allocator<T>> class vector;
template<class T> using vectorType = vector<T, My_allocator<T>>;
vectorType<int> primes = {2,3,5,7,11,13,17,19,23,29};
Ключевое слово typedef не позволяет задавать такие псевдонимы шаблона.

Реализация Polyspace

Средство проверки правила отмечает все использование ключевого слова typedef.

Если вы не хотите удалять определенные экземпляры ключевого слова typedef, добавьте комментарий, выравнивающий по ширине те результаты. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Комментарии.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#include <cstdint>
#include <type_traits>

typedef std::int32_t (*fptr1) (std::int32_t); //Noncompliant
using fptr2 = std::int32_t (*) (std::int32_t); //Compliant

template <class T> using fptr3 = std::int32_t (*) (T); //Compliant

Определения псевдонима для fptr1 и fptr2 точно эквивалентны. Нет никакого typedef, эквивалентного для определения псевдонима для fptr3.

Использование typedef-s нарушает это правило. Правило требует, чтобы вы придерживались синтаксиса using для непротиворечивости, даже когда эквивалентный typedef существует.

Проверяйте информацию

Группа: Выражения

Введенный в R2019a