#include <iostream>
using namespace std;
template <class T>
struct test1 {
enum test2 {
test3, test4
};
friend test2 operator | (test2 f1, test2 f2) {
return static_cast<test2>(
static_cast<unsigned>(f1) | static_cast<unsigned>(f2)
);
}
};
int main() {
test1<int>::test2 flags = test1<int>::test3 | test1<int>::test4;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGUgPGNsYXNzIFQ+CnN0cnVjdCB0ZXN0MSB7CgllbnVtIHRlc3QyIHsKCQl0ZXN0MywgdGVzdDQKCX07CglmcmllbmQgdGVzdDIgb3BlcmF0b3IgfCAodGVzdDIgZjEsIHRlc3QyIGYyKSB7CgkJcmV0dXJuIHN0YXRpY19jYXN0PHRlc3QyPigKCQkJc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGYxKSB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmMikKCQkpOwoJfQp9OwoKaW50IG1haW4oKSB7Cgl0ZXN0MTxpbnQ+Ojp0ZXN0MiBmbGFncyA9IHRlc3QxPGludD46OnRlc3QzIHwgdGVzdDE8aW50Pjo6dGVzdDQ7Cn0=