#include <iostream>
#include <cstdint>
class A {
public:
virtual ~A () {}
};
class B : public A {
};
class C : public A {
};
int main() {
uint8_t x;
int32_t y = -4321238;
int* z;
B b;
A& a = b;
try {
std::cout << "Casting Integers" << std::endl;
x = static_cast<uint8_t> (y);
std::cout << x << std::endl;
std::cout << "Reinterpret casting pointers" << std::endl;
z = reinterpret_cast<int*> (y);
C* pc = dynamic_cast<C*> (&a);
std::cout << pc << std::endl;
std::cout << "Reinterpret casting references" << std::endl;
C& rc = dynamic_cast<C&> (a);
std::cout << &rc << std::endl;
} catch (...) {
std::cout << "Exception!\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGludD4KCmNsYXNzIEEgewoJcHVibGljOgoJCXZpcnR1YWwgfkEgKCkge30KfTsKCmNsYXNzIEIgOiBwdWJsaWMgQSB7Cn07CgpjbGFzcyBDIDogcHVibGljIEEgewp9OwoKaW50IG1haW4oKSB7Cgl1aW50OF90IHg7CglpbnQzMl90IHkgPSAtNDMyMTIzODsKCWludCogejsKCUIgYjsKCUEmIGEgPSBiOwoJCgl0cnkgewoJCXN0ZDo6Y291dCA8PCAiQ2FzdGluZyBJbnRlZ2VycyIgPDwgc3RkOjplbmRsOwoJCXggPSBzdGF0aWNfY2FzdDx1aW50OF90PiAoeSk7CgkJc3RkOjpjb3V0IDw8IHggPDwgc3RkOjplbmRsOwoJCQoJCXN0ZDo6Y291dCA8PCAiUmVpbnRlcnByZXQgY2FzdGluZyBwb2ludGVycyIgPDwgc3RkOjplbmRsOwoJCXogPSByZWludGVycHJldF9jYXN0PGludCo+ICh5KTsKCQkKCQlDKiBwYyA9IGR5bmFtaWNfY2FzdDxDKj4gKCZhKTsKCQlzdGQ6OmNvdXQgPDwgcGMgPDwgc3RkOjplbmRsOwoJCQoJCXN0ZDo6Y291dCA8PCAiUmVpbnRlcnByZXQgY2FzdGluZyByZWZlcmVuY2VzIiA8PCBzdGQ6OmVuZGw7CgkJQyYgcmMgPSBkeW5hbWljX2Nhc3Q8QyY+IChhKTsKCQlzdGQ6OmNvdXQgPDwgJnJjIDw8IHN0ZDo6ZW5kbDsKCX0gY2F0Y2ggKC4uLikgewoJCXN0ZDo6Y291dCA8PCAiRXhjZXB0aW9uIVxuIjsKCX0KCQoJcmV0dXJuIDA7Cn0=