#include <iostream> #include <exception> #include <assert.h> class Base { public: virtual int foo() { return 1; } float x_; }; class Deriv : public Base { public: char x_; }; int main(int argc, char **argv) { Base b, *bptr = &b; Deriv d, *dptr = &d; // OK (run-time check passes). bptr = dynamic_cast<Base *>(&d); assert(bptr != NULL); // OK (run-time check passes). dptr = dynamic_cast<Deriv *>(bptr); assert(dptr != NULL); // Run-time check fails, cast returns NULL. bptr = &b; dptr = dynamic_cast<Deriv *>(bptr); assert(dptr != NULL); return 0; }