Bruce Eckel's Thinking in C++, 2nd Ed | Contents | Prev | Next |
//: C23:Autoexcp.cpp // No matching conversions #include <iostream> using namespace std; class Except1 {}; class Except2 { public: Except2(Except1&) {} }; void f() { throw Except1(); } int main() { try { f(); } catch (Except2) { cout << "inside catch(Except2)" << endl; } catch (Except1) { cout << "inside catch(Except1)" << endl; } } ///:~
//: C23:Basexcpt.cpp // Exception hierarchies #include <iostream> using namespace std; class X { public: class Trouble {}; class Small : public Trouble {}; class Big : public Trouble {}; void f() { throw Big(); } }; int main() { X x; try { x.f(); } catch(X::Trouble) { cout << "caught Trouble" << endl; // Hidden by previous handler: } catch(X::Small) { cout << "caught Small Trouble" << endl; } catch(X::Big) { cout << "caught Big Trouble" << endl; } } ///:~