Если вы настаиваете на этом, по крайней мере, закройте уродство в операторе, чтобы остальная часть кода была написана, по крайней мере, достаточно аккуратно:
#include <iostream>
using namespace std;
enum num
{
NUM_ZERO = 0,
NUM_ONE = 1,
NUM_TWO = 2,
NUM_THREE = 4
};
num &operator|=(num &a, num const &b) {
a = static_cast<num>(a | b);
return a;
}
int main()
{
num numFlag;
numFlag |= NUM_TWO;
}
Но имейте в виду, что это будет позвольте вам генерировать значения, которых нет в вашем перечислении. Например, последовательность типа:
num a{NUM_ZERO};
a |= NUM_TWO;
a |= NUM_THREE;
... дает a
значение, которого нет в перечислении.