#include <iostream>
enum OperationMode
{
FIRST = 0x1,
SECOND = 0x2
};
OperationMode operator | (OperationMode lhs, OperationMode rhs )
{
std::cout << "OperationMode operator |\n";
// Cast to int first otherwise we'll just end up recursing
return static_cast< OperationMode >( static_cast< int >( lhs ) | static_cast< int >( rhs ) );
}
OperationMode operator + (OperationMode lhs, OperationMode rhs )
{
std::cout << "OperationMode operator +\n";
// Cast to int first otherwise we'll just end up recursing
return static_cast< OperationMode >( static_cast< int >( lhs ) | static_cast< int >( rhs ) );
}
int main ()
{
OperationMode a = FIRST + SECOND;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgplbnVtIE9wZXJhdGlvbk1vZGUKewpGSVJTVCA9IDB4MSwKU0VDT05EID0gMHgyCn07CgpPcGVyYXRpb25Nb2RlIG9wZXJhdG9yIHwgKE9wZXJhdGlvbk1vZGUgbGhzLCBPcGVyYXRpb25Nb2RlIHJocyApCnsKCXN0ZDo6Y291dCA8PCAiT3BlcmF0aW9uTW9kZSBvcGVyYXRvciB8XG4iOwogICAgLy8gQ2FzdCB0byBpbnQgZmlyc3Qgb3RoZXJ3aXNlIHdlJ2xsIGp1c3QgZW5kIHVwIHJlY3Vyc2luZwogICAgcmV0dXJuIHN0YXRpY19jYXN0PCBPcGVyYXRpb25Nb2RlID4oIHN0YXRpY19jYXN0PCBpbnQgPiggbGhzICkgfCBzdGF0aWNfY2FzdDwgaW50ID4oIHJocyApICk7Cn0KCk9wZXJhdGlvbk1vZGUgb3BlcmF0b3IgKyAoT3BlcmF0aW9uTW9kZSBsaHMsIE9wZXJhdGlvbk1vZGUgcmhzICkKewoJc3RkOjpjb3V0IDw8ICJPcGVyYXRpb25Nb2RlIG9wZXJhdG9yICtcbiI7CiAgICAvLyBDYXN0IHRvIGludCBmaXJzdCBvdGhlcndpc2Ugd2UnbGwganVzdCBlbmQgdXAgcmVjdXJzaW5nCiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8IE9wZXJhdGlvbk1vZGUgPiggc3RhdGljX2Nhc3Q8IGludCA+KCBsaHMgKSB8IHN0YXRpY19jYXN0PCBpbnQgPiggcmhzICkgKTsKfQoKaW50IG1haW4gKCkKewoJT3BlcmF0aW9uTW9kZSBhID0gRklSU1QgKyBTRUNPTkQ7Cn0=