//: C08:RTTIwithExceptions.cpp // From Thinking in C++, 2nd Edition // Available at http://www.BruceEckel.com // (c) Bruce Eckel 2000 // Copyright notice in Copyright.txt #include #include using namespace std; class X { public: virtual ~X(){} }; class B { public: virtual ~B(){} }; class D : public B {}; int main() { D d; B & b = d; // Upcast to reference try { X& xr = dynamic_cast(b); } catch(...) { cout << "dynamic_cast(b) failed" << endl; } X* xp = 0; try { typeid(*xp); // Throws exception } catch(bad_typeid) { cout << "Bad typeid() expression" << endl; } } ///:~