質問が変更されました!
列挙型をローカルの名前空間から非表示にする簡単な方法、つまり構造体内の列挙型を使用します。おおよそ次のようになります。
struct Color
{
enum Type
{
Red, Green, Black
};
Type t_;
Color(Type t) : t_(t) {}
operator Type () const {return t_;}
private:
template<typename T>
operator T () const;
};
operator T () は、暗黙的な型キャストからの保護です。次に、このコードを gcc と keil でコンパイルしようとしました。
Color n;
int a[9];
a[ (int)n ] = 1;
gcc はエラーなしでコンパイルしました (これは私が予想していたことです) が、Keil は「無効な型変換です。演算子 () にアクセスできません」というエラーを出しました。
だから私の質問は次のとおりです。どのコンパイラが正しいですか?
C++11 列挙型クラスについては知っていますが、現在 Keil ではサポートされていません