-features=extensions オプションを使用すると、コンパイラにより enum の型と変数の前方宣言が認められます。さらに、不完全な enum 型による変数宣言も認められます。不完全な enum 型は、現行のプラットフォームの int 型と同じサイズと範囲を持つと想定されます。
次の 2 つの行は、-features=extensions オプションを使用した場合にコンパイルされる不正なコードの例です。
enum E; // invalid: forward declaration of enum not allowed E e; // invalid: type E is incomplete
enum 定義では、ほかの enum 定義を参照できず、ほかの型の相互参照もできないため、列挙型の前方宣言は必要ありません。コードを有効なものにするには、enum を使用する前に、その定義を完全なものにしておきます。