web-dev-qa-db-ja.com

ISO C ++は、「enum」型への前方参照を禁止しています

与えられたプログラム:

enum E : int
{
    A, B, C
};

g++ -c test.cppは問題なく動作します。しかしながら、 clang++ -c test.cppは次のエラーを返します。

test.cpp:1:6: error: ISO C++ forbids forward references to 'enum' types
enum E : int
     ^
test.cpp:1:8: error: expected unqualified-id
enum E : int
       ^
2 errors generated.

これらのエラーメッセージは私には意味がありません。ここには前方参照はありません。

31

列挙型の基になる型の指定は、C++ 11言語機能です。コードをコンパイルするには、スイッチ-std=c++11を追加する必要があります。これは、GCCとClangの両方で機能します。

C++ 03の列挙型の場合、列挙子の値がintまたはunsigned intに収まらない限り、基になる整数型は実装定義です。 (ただし、Microsoftのコンパイラは、VS 2005以降、独自の拡張機能として列挙型の基になる型を指定することを許可しています。)

30