#include <iostream>
using namespace std;
class base
{
public:
virtual ~base(){}
};
class derv: public base
{
public:
void f() { cout << "derv is called" <<endl;}
};
int main() {
base* p = new base();
derv *d1 = dynamic_cast<derv*>(p);
if(d1 == nullptr)
{
std::cout << "nullptr\n";
}
// Since p point to base , so d1 should return nullptr
//calling any function using d1, should fail/crash
//but why the following line is working ??
d1->f();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpjbGFzcyBiYXNlIAp7CiBwdWJsaWM6CiAgdmlydHVhbCB+YmFzZSgpe30KfTsKY2xhc3MgZGVydjogcHVibGljIGJhc2UgCnsKIHB1YmxpYzoKICAgdm9pZCBmKCkgeyBjb3V0IDw8ICJkZXJ2IGlzIGNhbGxlZCIgPDxlbmRsO30KfTsKaW50IG1haW4oKSB7CiAgYmFzZSogcCA9IG5ldyBiYXNlKCk7CiAgZGVydiAqZDEgPSBkeW5hbWljX2Nhc3Q8ZGVydio+KHApOwogIGlmKGQxID09IG51bGxwdHIpCiAgewogIAlzdGQ6OmNvdXQgPDwgIm51bGxwdHJcbiI7CiAgfQoKIC8vIFNpbmNlIHAgcG9pbnQgdG8gYmFzZSAsIHNvIGQxIHNob3VsZCByZXR1cm4gbnVsbHB0ciAKIC8vY2FsbGluZyBhbnkgZnVuY3Rpb24gdXNpbmcgZDEsIHNob3VsZCBmYWlsL2NyYXNoIAogLy9idXQgd2h5IHRoZSBmb2xsb3dpbmcgbGluZSBpcyB3b3JraW5nID8/IAoKIGQxLT5mKCk7Cn0=