#include <iostream>
#include <typeinfo>
using std::cout;
using std::endl;
struct C;
struct B
{
long unsigned int hash;
B(C *c);
virtual ~B() = default;
};
struct C : B
{
C() : B(this)
{
cout << "C()" << endl;
}
};
B::B(C *c)
{
hash = typeid(*c).hash_code(); //1, UB?
}
C c;
int main()
{
cout << c.hash << endl;
cout << typeid(c).hash_code() << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+Cgp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6ZW5kbDsKCnN0cnVjdCBDOwoKc3RydWN0IEIKewogICAgbG9uZyB1bnNpZ25lZCBpbnQgaGFzaDsKCiAgICBCKEMgKmMpOwoKICAgIHZpcnR1YWwgfkIoKSA9IGRlZmF1bHQ7Cn07CgpzdHJ1Y3QgQyA6IEIKewogICAgQygpIDogQih0aGlzKQogICAgewogICAgICAgIGNvdXQgPDwgIkMoKSIgPDwgZW5kbDsKICAgIH0KfTsKCkI6OkIoQyAqYykKewogICAgaGFzaCA9IHR5cGVpZCgqYykuaGFzaF9jb2RlKCk7IC8vMSwgVUI/Cn0KCkMgYzsKaW50IG1haW4oKQp7CiAgICBjb3V0IDw8IGMuaGFzaCA8PCBlbmRsOwogICAgY291dCA8PCB0eXBlaWQoYykuaGFzaF9jb2RlKCkgPDwgZW5kbDsKfQ==