#include <iostream>
#include <typeinfo>
using namespace std;
struct Resource {
virtual ~Resource() = default;
};
struct Texture : Resource {};
struct Tiles : Texture {};
int main() {
Resource *resource = new Resource;
Resource *texture = new Texture;
Resource* tiles = new Tiles;
cout << typeid(*resource).name() << endl; // yields 'Resource'
cout << typeid(*texture).name() << endl; // yields 'Texture'
cout << typeid(*tiles).name() << endl; // yields 'Texture'
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgUmVzb3VyY2UgewoJdmlydHVhbCB+UmVzb3VyY2UoKSA9IGRlZmF1bHQ7Cn07CgpzdHJ1Y3QgVGV4dHVyZSA6IFJlc291cmNlIHt9OwoKc3RydWN0IFRpbGVzIDogVGV4dHVyZSB7fTsKCmludCBtYWluKCkgewoJUmVzb3VyY2UgKnJlc291cmNlID0gbmV3IFJlc291cmNlOwoJUmVzb3VyY2UgKnRleHR1cmUgPSBuZXcgVGV4dHVyZTsKCVJlc291cmNlKiB0aWxlcyA9IG5ldyBUaWxlczsKCQoJY291dCA8PCB0eXBlaWQoKnJlc291cmNlKS5uYW1lKCkgPDwgZW5kbDsgLy8geWllbGRzICdSZXNvdXJjZScKCWNvdXQgPDwgdHlwZWlkKCp0ZXh0dXJlKS5uYW1lKCkgPDwgZW5kbDsgLy8geWllbGRzICdUZXh0dXJlJwoJY291dCA8PCB0eXBlaWQoKnRpbGVzKS5uYW1lKCkgPDwgZW5kbDsgLy8geWllbGRzICdUZXh0dXJlJwoKCXJldHVybiAwOwp9