#include <iostream>
#include <typeinfo>
using std::cout;
using std::endl;
struct C;
struct B
{
long unsigned int hash;
B(C *c);
};
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+Cgp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6ZW5kbDsKCnN0cnVjdCBDOwoKc3RydWN0IEIKewogICAgbG9uZyB1bnNpZ25lZCBpbnQgaGFzaDsKCiAgICBCKEMgKmMpOwp9OwoKc3RydWN0IEMgOiBCCnsKICAgIEMoKSA6IEIodGhpcykKICAgIHsKICAgICAgICBjb3V0IDw8ICJDKCkiIDw8IGVuZGw7CiAgICB9Cn07CgpCOjpCKEMgKmMpCnsKICAgIGhhc2ggPSB0eXBlaWQoKmMpLmhhc2hfY29kZSgpOyAvLzEsIFVCPwp9CgpDIGM7CmludCBtYWluKCkKewogICAgY291dCA8PCBjLmhhc2ggPDwgZW5kbDsKICAgIGNvdXQgPDwgdHlwZWlkKGMpLmhhc2hfY29kZSgpIDw8IGVuZGw7Cn0=