std::uncaught_exception

From Cppreference

Jump to: navigation, search
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

noexcept specification:  
noexcept

  (since C++11)

[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)
shared pointer type for handling exception objects
(typedef)

[edit] External links

GOTW issue 47: Uncaught Exceptions