>>270
C ではこういうルールになっている
・ 列挙定数の値を定義する式は int 型で表現可能な値を持つ整数定数式でなければならない
・ 列挙体 (列挙型のオブジェクト) の大きさは要素の全てを保持可能な大きさをもつ
 がその選択は処理系定義である。
・ 列挙定数の型は (列挙型ではなく) int である

つまり、 C では列挙体と列挙定数の型が異なり、
列挙定数の型は int そのもの。
それは単に int の大きさがそれぞれ違うってだけじゃないの?
だとするとどちらの挙動も仕様通り。

(余談だが C++ では列挙定数の型は列挙型なので、 C とは少し解釈が違う。)