https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53479
--- Comment #15 from Eric Gallager <egall at gwmail dot gwu.edu> --- (In reply to Jonathan Wakely from comment #11) > (In reply to Eric Gallager from comment #6) > > This should probably depend on the -fstrict-enums flag, as that controls > > whether enums can have any value or just those values that are enumerated. > > No, that's not what it does. > > It tells the compiler the enum will only be one of the values of the > enumeration, which is not the same as the values corresponding to > enumerators. > That's a confusing distinction; they sound like the same thing at first to someone like me who doesn't speak standards-ese... > > As I said in comment 3, the OP's type has the values of int, because it has > an underlying type of int. > > Given enum E { E1 = 1, E3 = 3 } the values of the type are 0, 1, 2 and 3 and > -fstrict-enums tells the compiler it will never have a value outside that > range. It does **not** tell it that the type will never have the value 0 or > 2. Thanks, that example helps clear things up. Could it be added to the documentation for -fstrict-enums?