https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71598
--- Comment #5 from Alexander Monakov <amonakov at gcc dot gnu.org> --- C11 6.7.2.2 p4 says, Each enumerated type shall be compatible with char, a signed integer type, or an unsigned integer type [...] and 6.5 p7 says, An object shall have its stored value accessed only by an lvalue expression that has one of the following types: * a type compatible with the effective type of the object (and the third bullet answers my implicit question in comment #2 about signed/unsigned aliases).