#include <iostream>
#include <string>
using namespace std;
class Thing {
int a;
public:
Thing(int v = 0): a (v) {}
const char * type_name(){ return "Thing"; }
int value() { return a; }
};
class OtherThing : public Thing {
public:
OtherThing(int v): Thing(v) {}
const char * type_name() { return "Other Thing"; }
};
union Something {
Something(int v) : t(v) {}
Thing t;
OtherThing ot;
};
int main() {
Something sth{42};
std::cout << sth.t.type_name() << "\n";
std::cout << sth.t.value() << "\n";
std::cout << sth.ot.type_name() << "\n";
std::cout << sth.ot.value() << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIFRoaW5nIHsKCWludCBhOwpwdWJsaWM6CiAgICBUaGluZyhpbnQgdiA9IDApOiBhICh2KSB7fQoJY29uc3QgY2hhciAqIHR5cGVfbmFtZSgpeyByZXR1cm4gIlRoaW5nIjsgfQoJaW50IHZhbHVlKCkgeyByZXR1cm4gYTsgfQp9OwoKY2xhc3MgT3RoZXJUaGluZyA6IHB1YmxpYyBUaGluZyB7CnB1YmxpYzoKCU90aGVyVGhpbmcoaW50IHYpOiBUaGluZyh2KSB7fQoJCgljb25zdCBjaGFyICogdHlwZV9uYW1lKCkgeyByZXR1cm4gIk90aGVyIFRoaW5nIjsgfQp9OwoKdW5pb24gU29tZXRoaW5nIHsKCVNvbWV0aGluZyhpbnQgdikgOiB0KHYpIHt9CglUaGluZyB0OwoJT3RoZXJUaGluZyBvdDsKfTsKCmludCBtYWluKCkgewoJU29tZXRoaW5nIHN0aHs0Mn07CglzdGQ6OmNvdXQgPDwgc3RoLnQudHlwZV9uYW1lKCkgPDwgIlxuIjsKCXN0ZDo6Y291dCA8PCBzdGgudC52YWx1ZSgpIDw8ICJcbiI7CgkKCXN0ZDo6Y291dCA8PCBzdGgub3QudHlwZV9uYW1lKCkgPDwgIlxuIjsKCXN0ZDo6Y291dCA8PCBzdGgub3QudmFsdWUoKSA8PCAiXG4iOwoJcmV0dXJuIDA7Cn0=