You have a faulty assumption. The above diagnostics are compiler
warnings, not mandated by the standard.
The reason the compiler is warning on the second case but not the
first is that, for an enumeration with no fixed underlying type, the
range of values of the enumeration is restricted based on the range of
values of the enumerators, whereas for an enumeration with a fixed
underlying type, the range of values of the enumeration is the range
of representable values of the underlying type.
In code:
enum E { X, Y }; struct S { E e : 1 };
E e = (E)2; // undefined behavior, 2 is not in the range of
representable values of type E
S s = {e};
enum class E { X, Y }; struct S { E e : 1 }; // compiler warning:
bit-field too small
E e = (E)2; // OK
S s = {e}; // oops
If this bothers you, maybe you could ask your compiler vendor to
suppress the warning in this case?