Pop quiz, hotshot:
int main() { enum Result { LOSE = 0, WIN, DIE_TRYING } result; switch (result) { case LOSE: break; case WIN: break; case DIE_TRYING: break; default: // can't get here? } }
How many possible values can result
hold?
...
The answer, of course, is four. In addition to LOSE
, WIN
, and DIE_TRYING
,
WIN | DIE_TRYING
is a valid value for result
.
A rule of thumb is that enums can hold any value that fits into the smallest
bit pattern required by the enum. Since the Result
enum needs two bits
to store 00b
, 01b
, and 10b
, one
valid value is 11b
, a.k.a. WIN | DIE_TRYING
.