enum class Foo
{
First = 0x01,
Second = 0x02,
Third = 0x04,
};
Foo operator| ( Foo lhs, Foo rhs )
{ return static_cast< Foo >( static_cast< int >( lhs ) | static_cast< int >( rhs ) ); }
int main()
{
Foo val = Foo::First | Foo::Second;
return 0;
}
ZW51bSBjbGFzcyBGb28KewogIEZpcnN0ICAgPSAweDAxLAogIFNlY29uZCAgPSAweDAyLAogIFRoaXJkICAgPSAweDA0LAp9OwoKRm9vIG9wZXJhdG9yfCAoIEZvbyBsaHMsIEZvbyByaHMgKQogICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8IEZvbyA+KCBzdGF0aWNfY2FzdDwgaW50ID4oIGxocyApIHwgc3RhdGljX2Nhc3Q8IGludCA+KCByaHMgKSApOyB9CgppbnQgbWFpbigpCnsKICBGb28gdmFsID0gRm9vOjpGaXJzdCB8IEZvbzo6U2Vjb25kOwogIHJldHVybiAwOwp9