std::uncaught_exception
From cppreference.com
Defined in header <exception>
|
||
bool uncaught_exception(); |
||
Detects if the current thread has a live exception object, that is, an exception has been thrown and not yet entered a matching catch clause, std::terminate or std::unexpected. In other words, stack unwinding is currently in progress.
Any exception thrown while std::uncaught_exception() == true calls std::terminate.
Contents |
[edit] Parameters
(none)
[edit] Return value
true if stack unwinding is currently in progress in this thread.
[edit] Exceptions
[edit] Example
#include <iostream> #include <exception> #include <stdexcept> struct Foo { ~Foo() { if(std::uncaught_exception()) std::cout << "~Foo() called during stack unwinding\n"; else std::cout << "~Foo() called normally\n"; } }; int main() { Foo f; try { Foo f; std::cout << "Exception thrown\n"; throw std::runtime_error("test exception"); } catch(const std::exception& e) { std::cout << "Exception caught: " << e.what() << '\n'; } }
Output:
Exception thrown ~Foo() called during stack unwinding Exception caught: test exception ~Foo() called normally
[edit] See also
function called when exception handling fails (function) | |
(C++11) |
shared pointer type for handling exception objects (typedef) |