メインコンテンツ

AUTOSAR C++14 Rule A7-1-6

typedef 指定子を使用してはなりません。

説明

ルール定義

typedef 指定子を使用してはなりません。

根拠

エイリアスを定義する場合、using 構文は typedef の代わりに適しています。

C++11 以降、using 構文を使用して、テンプレート引数にデータ型の制限がないテンプレート エイリアスを定義できます。たとえば、次のステートメントは vector のエイリアス vectorType を定義しています。引数 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

fptr1fptr2 のエイリアス定義は完全に同等です。fptr3 のエイリアス定義と同等な typedef はありません。

typedef の使用はこのルールに違反します。このルールでは、同等な typedef が存在する場合でも、整合性を取るために必ず using 構文を使用しなければなりません。

チェック情報

グループ: 宣言
カテゴリ: Required、Automated

バージョン履歴

R2019a で導入