#include <iostream>
#include <future>
using namespace std;
struct Parent {
virtual void a() { cout << "I am parent"; }
};
struct Child : Parent {
virtual void a() { cout << "I am child"; }
};
Child g_c;
int main() {
std::future<Parent&> p = async(launch::async, []() -> Parent& { return g_c; });
auto c = dynamic_cast<Child&>(p.get());
c.a();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnV0dXJlPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgUGFyZW50IHsKCXZpcnR1YWwgdm9pZCBhKCkgeyBjb3V0IDw8ICJJIGFtIHBhcmVudCI7IH0KfTsKc3RydWN0IENoaWxkIDogUGFyZW50IHsKCXZpcnR1YWwgdm9pZCBhKCkgeyBjb3V0IDw8ICJJIGFtIGNoaWxkIjsgfQp9OwoKQ2hpbGQgZ19jOwoKaW50IG1haW4oKSB7CglzdGQ6OmZ1dHVyZTxQYXJlbnQmPiBwID0gYXN5bmMobGF1bmNoOjphc3luYywgW10oKSAtPiBQYXJlbnQmIHsgcmV0dXJuIGdfYzsgfSk7CglhdXRvIGMgPSBkeW5hbWljX2Nhc3Q8Q2hpbGQmPihwLmdldCgpKTsKCWMuYSgpOwoJcmV0dXJuIDA7Cn0=