enum 宣言ではスコープを指定できないため、enum 名をスコープ修飾子として使用することはできません。たとえば、次のコードは不正です。
enum E {e1, e2, e3}; int i = E::e1; // invalid: E is not a scope name |
この不正なコードをコンパイルするには、-features=extensions オプションを使用します。enum 型の名前だった場合に、-features=extensions オプションはコンパイラにスコープ修飾子を無視するよう命令します。
このコードを有効なものにするには、不正な修飾子 E:: を取り除きます。
このオプションを使用すると、プログラムのタイプミスが検出されずにコンパイルされる可能性が高くなります。