class A { public: int a; virtual ~A() {} }; class B : public A { public: int b; }; class C : public B { public: int c; }; int f(const A* aptr) { if (const B* bptr = dynamic_cast(aptr)) { return 0; } else { return 1; } } int main() { C c; return f(&c); }