#include <iostream>
#include <typeinfo>
struct foo{
public:
virtual ~foo(){}
};
struct bar : foo{};
int main() {
bar *pbar = new bar;
foo *pfoo = pbar;
std::cout << typeid(foo).name() << std::endl;
std::cout << typeid(bar).name() << std::endl;
std::cout << typeid(*pfoo).name() << std::endl;
std::cout << typeid(*pbar).name() << std::endl;
delete pbar;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CgpzdHJ1Y3QgZm9vewoJcHVibGljOgoJIHZpcnR1YWwgfmZvbygpe30KCX07CgpzdHJ1Y3QgYmFyIDogZm9ve307CgppbnQgbWFpbigpIHsKCWJhciAqcGJhciA9IG5ldyBiYXI7Cglmb28gKnBmb28gPSBwYmFyOwoJc3RkOjpjb3V0IDw8IHR5cGVpZChmb28pLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgdHlwZWlkKGJhcikubmFtZSgpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCB0eXBlaWQoKnBmb28pLm5hbWUoKSA8PCBzdGQ6OmVuZGw7CglzdGQ6OmNvdXQgPDwgdHlwZWlkKCpwYmFyKS5uYW1lKCkgPDwgc3RkOjplbmRsOwoJZGVsZXRlIHBiYXI7Cn0=