Перечисление в определенной области строго типизировано.Вам нужно явно определить операторы, которые вы хотите поддерживать, поскольку неявное преобразование в целое число не может сделать жизнеспособным встроенный оператор.
Если вы хотите включить неявное преобразование в int, не даваявверх по области видимости идентификатора вы можете использовать перечисление в "старом стиле".То есть вместо этого оберните его в тип класса:
struct A {
enum Type {
X = 0, Y = 1, Z = 2,
};
};
Поскольку перечислители с незаданной областью также являются членами включающей области действия, вы можете написать еще 1 << A::X
, и это даст желаемый эффект.Цена, конечно, в том, что теперь имя перечисления является более многословным A::Type
.