##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# exception specification

From cppreference.com
< cpp‎ | language

Lists the exceptions that a function might directly or indirectly throw.

### [edit] Syntax

`throw(`typeid, typeid, ...`)` |  | (deprecated)

### [edit] Explanation

If a function is declared with type `T` listed in its exception specification, the function may throw exceptions of that type or a type derived from it.

If the function throws an exception of the type not listed in its exception specification, the function std::unexpected is called. The default function calls std::terminate, but it may be replaced by a user-provided function (via std::set_unexpected) which may call std::terminate or throw an exception. If the exception thrown from std::unexpected is accepted by the exception specification, stack unwinding continues as usual. If it isn't, but std::bad_exception is allowed by the exception specification, std::bad_exception is thrown. Otherwise, std::terminate is called.

### [edit] Example

Run this code

    class X {};
    class Y {};
    class Z : public X {};
    class W {};

    void f() throw(X, Y)
    {
        int n = 0;
        if (n) throw X(); // OK
        if (n) throw Z(); // also OK
        throw W(); // will call std::unexpected()
    }

### [edit] See also

- `noexcept` specifier

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/language/except_spec&oldid=49909"