#include <iostream>
using namespace std;
struct foo {};
foo& operator<<(foo& f, int data)
{
cout << "int: " << data;
return f;
}
foo& operator<<(foo& f, const char* data)
{
cout << "char: " << data;
return f;
}
foo& debug_out()
{
static foo foo_;
return foo_;
}
typedef enum {
Ok = 0,
NonOk = 10
} MyEnum;
foo& operator<<(foo& out, MyEnum var)
{
switch(var)
{
case Ok:
return out << "Ok";
case NonOk:
return out << "NonOk";
default:
return out << "wrong val: " << static_cast<int>(var);
}
};
int main() {
// your code goes here
debug_out() << 10;
cout << endl;
debug_out() << "10";
cout << endl;
debug_out() << NonOk;
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGZvbyB7fTsKCmZvbyYgb3BlcmF0b3I8PChmb28mIGYsIGludCBkYXRhKQp7Cgljb3V0IDw8ICJpbnQ6ICIgPDwgZGF0YTsKCXJldHVybiBmOwp9CgoKZm9vJiBvcGVyYXRvcjw8KGZvbyYgZiwgY29uc3QgY2hhciogZGF0YSkKewoJY291dCA8PCAiY2hhcjogIiA8PCBkYXRhOwoJcmV0dXJuIGY7Cn0KCmZvbyYgZGVidWdfb3V0KCkKewoJc3RhdGljIGZvbyBmb29fOwoJcmV0dXJuIGZvb187Cn0KCnR5cGVkZWYgZW51bSB7CiAgICBPayA9IDAsCiAgICBOb25PayA9IDEwCn0gTXlFbnVtOwoKZm9vJiBvcGVyYXRvcjw8KGZvbyYgb3V0LCBNeUVudW0gdmFyKQp7CiAgICBzd2l0Y2godmFyKQogICAgewogICAgICAgIGNhc2UgT2s6CiAgICAgICAgICAgIHJldHVybiBvdXQgPDwgIk9rIjsKICAgICAgICBjYXNlIE5vbk9rOgogICAgICAgICAgICByZXR1cm4gb3V0IDw8ICJOb25PayI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG91dCA8PCAid3JvbmcgdmFsOiAiIDw8IHN0YXRpY19jYXN0PGludD4odmFyKTsKICAgIH0KfTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJZGVidWdfb3V0KCkgPDwgMTA7Cgljb3V0IDw8IGVuZGw7CglkZWJ1Z19vdXQoKSA8PCAiMTAiOwoJY291dCA8PCBlbmRsOwoJZGVidWdfb3V0KCkgPDwgTm9uT2s7Cgljb3V0IDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==