#include <iostream>
using namespace std;
enum class Coolness { kUndefined, kUncool, kCool };
enum class Tallness { kUndefined, kShort, kTall };
void MakePerson (Coolness coolness, Tallness tallness)
{
cout << "Coolness: ";
switch (coolness)
{
case Coolness::kUndefined:
cout << "Undefined";
break;
case Coolness::kUncool:
cout << "Uncool";
break;
case Coolness::kCool:
cout << "Cool";
break;
}
cout << ", Tallness: ";
switch (tallness)
{
case Tallness::kUndefined:
cout << "Undefined";
break;
case Tallness::kShort:
cout << "Short";
break;
case Tallness::kTall:
cout << "Tall";
break;
}
cout << endl;
}
inline void MakePerson (Coolness coolness)
{
MakePerson(coolness, Tallness::kUndefined);
}
inline void MakePerson (Tallness tallness)
{
MakePerson(Coolness::kUndefined, tallness);
}
#define MAKE_PERSON(x) \
{ \
cout << __FILE__ << ": " << __LINE__ << endl; \
MakePerson(x); \
}
int main()
{
MAKE_PERSON(Coolness::kUncool);
MAKE_PERSON(Tallness::kTall);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKZW51bSBjbGFzcyBDb29sbmVzcyB7IGtVbmRlZmluZWQsIGtVbmNvb2wsIGtDb29sIH07CmVudW0gY2xhc3MgVGFsbG5lc3MgeyBrVW5kZWZpbmVkLCBrU2hvcnQsIGtUYWxsIH07Cgp2b2lkIE1ha2VQZXJzb24gKENvb2xuZXNzIGNvb2xuZXNzLCBUYWxsbmVzcyB0YWxsbmVzcykKewoJY291dCA8PCAiQ29vbG5lc3M6ICI7Cglzd2l0Y2ggKGNvb2xuZXNzKQoJewoJCWNhc2UgQ29vbG5lc3M6OmtVbmRlZmluZWQ6CgkJCWNvdXQgPDwgIlVuZGVmaW5lZCI7CgkJCWJyZWFrOwoJCWNhc2UgQ29vbG5lc3M6OmtVbmNvb2w6CgkJCWNvdXQgPDwgIlVuY29vbCI7CgkJCWJyZWFrOwoJCWNhc2UgQ29vbG5lc3M6OmtDb29sOgoJCQljb3V0IDw8ICJDb29sIjsKCQkJYnJlYWs7Cgl9CgoJY291dCA8PCAiLCBUYWxsbmVzczogIjsKCXN3aXRjaCAodGFsbG5lc3MpCgl7CgkJY2FzZSBUYWxsbmVzczo6a1VuZGVmaW5lZDoKCQkJY291dCA8PCAiVW5kZWZpbmVkIjsKCQkJYnJlYWs7CgkJY2FzZSBUYWxsbmVzczo6a1Nob3J0OgoJCQljb3V0IDw8ICJTaG9ydCI7CgkJCWJyZWFrOwoJCWNhc2UgVGFsbG5lc3M6OmtUYWxsOgoJCQljb3V0IDw8ICJUYWxsIjsKCQkJYnJlYWs7Cgl9Cgljb3V0IDw8IGVuZGw7Cn0KCmlubGluZSB2b2lkIE1ha2VQZXJzb24gKENvb2xuZXNzIGNvb2xuZXNzKQp7CglNYWtlUGVyc29uKGNvb2xuZXNzLCBUYWxsbmVzczo6a1VuZGVmaW5lZCk7Cn0KCmlubGluZSB2b2lkIE1ha2VQZXJzb24gKFRhbGxuZXNzIHRhbGxuZXNzKQp7CglNYWtlUGVyc29uKENvb2xuZXNzOjprVW5kZWZpbmVkLCB0YWxsbmVzcyk7Cn0KCiNkZWZpbmUgTUFLRV9QRVJTT04oeCkgXAp7IFwKCWNvdXQgPDwgX19GSUxFX18gPDwgIjogIiA8PCBfX0xJTkVfXyA8PCBlbmRsOyBcCglNYWtlUGVyc29uKHgpOyBcCn0KCmludCBtYWluKCkKewoJTUFLRV9QRVJTT04oQ29vbG5lc3M6OmtVbmNvb2wpOwoJTUFLRV9QRVJTT04oVGFsbG5lc3M6OmtUYWxsKTsKCXJldHVybiAwOwp9