#include #include #include #include using namespace std; int main( ) { struct Base { virtual ~Base() {} }; struct Derived : Base {}; struct Leaf : Derived {}; Base *base_ptr = new Derived(); Derived *derived_ptr = dynamic_cast(base_ptr); // will succeed Leaf *leaf_ptr = dynamic_cast(base_ptr); // will set leaf_ptr to 0 Derived &derived = dynamic_cast(*base_ptr); // will succeed try { Leaf &leaf = dynamic_cast(*base_ptr); // will throw std::bad_cast } catch(const bad_cast&) { cout << "bad_cast caught at line " << __LINE__ << endl; return -1; // failed reference cast caught here } return 0; }