現在、VisualStudio11ベータ版で遊んでいます。いくつかのフラグを説明するために強く型付けされた列挙型を使用しています
enum class A : uint32_t
{
VAL1 = 1 << 0,
VAL2 = 1 << 1,
};
uint32_t v = A::VAL1 | A::VAL2; // Fails
上記のように組み合わせようとすると、次のエラーが発生します
error C2676: binary '|' : 'A' does not define this operator or a conversion to a type acceptable to the predefined operator
これはコンパイラのバグですか、それともc ++ 11標準に従って無効にしようとしているものですか?
私の仮定は、前の列挙型宣言は書くことと同等であるということでした
struct A
{
enum : uint32_t
{
VAL1 = 1 << 0,
VAL2 = 1 << 1,
};
};
uint32_t v = A::VAL1 | A::VAL2; // Succeeds, v = 3