#include <iostream>
#include <vector>
class base
{
virtual void foo()
{}
};
class derived1 : public base
{
};
class derived2 : public base
{
};
int main()
{
std::vector<base*> v;
v.emplace_back(new base);
v.emplace_back(new derived1);
v.emplace_back(new derived2);
for (size_t i = 0; i < v.size(); ++i)
{
std::cout << typeid(v[i]).name() << "\n";
}
for (size_t i = 0; i < v.size(); ++i)
{
std::cout << typeid(*v[i]).name() << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKY2xhc3MgYmFzZQp7CiAgICB2aXJ0dWFsIHZvaWQgZm9vKCkKICAgIHt9Cn07CgpjbGFzcyBkZXJpdmVkMSA6IHB1YmxpYyBiYXNlCnsKfTsKCmNsYXNzIGRlcml2ZWQyIDogcHVibGljIGJhc2UKewp9OwoKaW50IG1haW4oKQp7CiAgICBzdGQ6OnZlY3RvcjxiYXNlKj4gdjsKICAgIHYuZW1wbGFjZV9iYWNrKG5ldyBiYXNlKTsKICAgIHYuZW1wbGFjZV9iYWNrKG5ldyBkZXJpdmVkMSk7CiAgICB2LmVtcGxhY2VfYmFjayhuZXcgZGVyaXZlZDIpOwoKICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdi5zaXplKCk7ICsraSkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgdHlwZWlkKHZbaV0pLm5hbWUoKSA8PCAiXG4iOwogICAgfQogICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2LnNpemUoKTsgKytpKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCB0eXBlaWQoKnZbaV0pLm5hbWUoKSA8PCAiXG4iOwogICAgfQogICAgcmV0dXJuIDA7Cn0K