Я думаю, что это действительно так, (int)3
должно быть возвращено в вашем примере.
Насколько мне известно, C рассматривает значения перечисления как тип int
через внутреннее приведение или что-то в этом духе. С перечислениями дело в том, что в C ++ они не могут быть LVALUE операции (потому что они не рассматриваются как числа), поэтому вы не можете увеличивать их или присваивать им значения. OTOH, вы всегда можете использовать их как RVALUE (как в C, так и в C ++), поэтому:
int flags = FileOpenFlags_Create | FileOpenFlags_Truncate;
действует как на C, так и на C ++, а
FileOpenFlags flags = FileOpenFlags_Create | FileOpenFlags_Truncate;
, вероятно, будет работать в C, но с треском провалится в C ++;)