https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87951
--- Comment #17 from Vitali <vlovich at gmail dot com> --- I was explicitly asked to open this as a separate bug in comment #7 of 87950. Would be helpful if the GCC devs could coordinate to figure out if they want separate bugs for C/C++ or 1 bug. Jonathan, on this forum your feedback comes off a bit like Skinner where he blames the children. There's clearly a gap between how compiler authors define switches as working & how developers wish to use those enums/wish those enums were actually defined. I appreciate there's a large amount of legacy code that complicates this issue but I don't think that condescending to people trying to communicate the issue in good faith moves the conversation along. I'd argue that clang strikes a much better balance here in terms of the practical implications of the warning even if it's not perfect. In my mind, warnings are most useful when they optimize for a low rate of false positives. The GCC warnings for enums do not in practice have a low rate of false positives and are clearly tuned to minimize false negatives (i.e. accidentally missing a switch statement that doesn't have all enums covered). At the very least it would be useful to give users the power to turn on a warning equivalent to Clang's that minimizes false negatives (or change -Wswitch to be equivalent to Clang & add a -Wpedantic-switch that's part of -pedantic for the current behaviour). You could even provide annotations that let users annotate enums/switches in an explicit fashion to indicate that they can be constructed with non-label values/aren't expected to be depending on which flag you choose to use to silence warnings/let the compiler optimize more fully. In practice, definitely in C++, enums ARE intended to be a closed set of all possible paths & the flags/random integer value cases are far less frequently used; even for bitmasks it's a lazy way to do it. In C++ I usually define strongly-typed types that represent the bitmask & overload the bit math operators for the enum to yield that secondary type. I think considering that's a technique used by Boost & Qt, it's reasonable to assume that having the enum double as the storage type for the bitmask is more of a hack technically allowed than one that is considered best practice by large C++ projects. In C it's more muddled because there's no operator overloading, but the number of enums that exist far outnumber the uses where it's used for bitwise math.