В общем наткнулся на такую интересную проблемку при работе с исключениями, вот мой код: #include <iostream> #include <exception> #include <stdexcept> class Exception : public std::exception { public: Exception() throw() {} explicit Exception(const std::string &m) throw() : exception() { mess_ = m; } ~Exception() throw() {} const char* what() const throw() { return mess_.c_str(); } private: std::string mess_; }; class LogicException : public std::logic_error { public: explicit LogicException(const std::string &m) throw() : std::logic_error(m) {} ~LogicException() throw() {} }; class RealyBadException {}; void f() throw(Exception, std::bad_exception) { //throw Exception("Exception from f()"); //случай f1 //throw LogicException("LogicException grom f()"); //случай f2 //throw RealyBadException(); //случай f3 } int main() { try { f(); } catch (std::bad_exception const& ex) { std::cout << "std::bad_exception" << std::endl; } catch (std::exception const& ex) { std::cout << ex.what() << std::endl; } catch (...) { std::cout << "Something realy odd" << std::endl; } } Так вот, суть проблемы вот в чем согласно книжке Б.Страуструпа по С++ если я нарушаю спецификацию исключений ф-ии ( в функции void f() throw(Exception) сгенерю исключение RealyBadException или LogicException) то вызывается ф-ия unexpected(),а затем terminate() что приводит к остановке программы. Если я добавлю к спецификации исключений std::bad_exception, то в точке вызова появится возможность перехватить исключение std::bad_exception - это в теории. Что же происходит на практике. 1) Если раскоментировать "случай f1", то все идет как и должно быть, исключение ловится во втором болке catch ф-ии main() 2) Если раскоментировать "случай f2" тогда в окне терминала я получаю следующее сообщение: terminate called after throwing an instance of 'LogicException' what(): LogicException grom f() Aborted 3) И в последнем случае f3 я получаю terminate called after throwing an instance of 'RealyBadException' Aborted хотя последние 2 случая должны ловица в первом блоке catch ф-ии main(). Кто сможет растолковать почему программа аварийно завершается вместо того чтобы обработать исключение.