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