#include #include #include 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(&d); assert(bptr != NULL); // OK (run-time check passes). dptr = dynamic_cast(bptr); assert(dptr != NULL); // Run-time check fails, cast returns NULL. bptr = &b; dptr = dynamic_cast(bptr); assert(dptr != NULL); return 0; }