メインコンテンツ

AUTOSAR C++14 Rule A7-2-2

Enumeration underlying type shall be explicitly defined

説明

ルール定義

列挙の潜在型を明示的に定義してはなりません。

根拠

次のような、スコープされない列挙宣言を考えます。

enum someEnum : type { ... }

: type が省略された場合、潜在型は処理系定義になります (型がすべての列挙値に対応しなければならないという要件のみが伴います)。潜在型を明示的に宣言しないと、処理系定義の動作が引き起こされます。

次のような、スコープされた列挙宣言を考えます。

enum class someEnum : type { ... }

: type が省略された場合、潜在型は int になります。列挙値が int で許容される値を超える場合はコンパイル エラーとなります。

スコープされない列挙型とスコープされた列挙型の両方について、処理系定義の動作やコンパイル エラーを回避するには、潜在型を明示的に宣言します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include <cstdint>

enum E1 { //Noncompliant unscoped enum
    E10,
    E11,
    E12
};

enum E2 : std::uint8_t { //Compliant unscoped enum
    E20,
    E21,
    E22
};

enum class E3 { //Noncompliant scoped enum
    E30,
    E31,
    E32
};

enum class E4 : std::uint8_t { //Compliant scoped enum
    E40,
    E41,
    E42
};

この例では、列挙型の潜在型が省略されているコードが非準拠となります。

チェック情報

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

バージョン履歴

R2019b で導入