>>144
c++ならばenum型を演算子のオーバーロードで

MyEnum operator|(MyEnum a,MyEnum b)
{return static_cast<MyEnum>(static_cast<int>(a)|static_cast<int>(b));}

>>145
つenable_if