通常の列挙型(enum)とスコープ付きの列挙型クラス(enum class)でそれぞれ異なる方法を取る必要があります。「enum構造体」を活用した裏テクニックもあります。 列挙型 C言語由来の古くから使われている列挙体であれば、特に意識することなくANDやOR等の演算が可能ですが、演算結果を列挙体の変数に格納する際にはキャストが必要になります。 enum Animal { Cat = 1 << 0, Dog = 1 << 1, }; // ERROR: Cannot initialize a variable of type 'Animal' with an rvalue of type 'int' Animal a = Animal::Cat | Animal::Dog; // キャストが必要 Animal a = static_cast<Animal>(Animal::Cat | An