# std::exception

From cppreference.com
< cpp‎ | error

Defined in header `<exception>` |  |
class exception; |  |

Provides consistent interface to handle errors through the throw expression.

All exceptions generated by the standard library inherit from `std::exception`.

All member functions of `std::exception` are constexpr. | (since C++26)

### Member functions

(constructor) | constructs the exception object (public member function)
(destructor) [virtual] | destroys the exception object (virtual public member function)
operator= | copies exception object (public member function)
what [virtual] | returns an explanatory string (virtual public member function)

### Standard exception requirements

Each standard library class `T` that derives from `std::exception` has the following publicly accessible member functions, each of them do not exit with an exception(until C++11)having a non-throwing exception specification(since C++11):

- default constructor (unless other constructors are provided)
- copy constructor
- copy assignment operator

The copy constructor and the copy assignment operator meet the following postcondition:

- If two objects lhs and rhs both have dynamic type `T` and lhs is a copy of rhs, then std::strcmp(lhs.what(), rhs.what()) is equal to ​0​.

The `what()` member function of each such `T` satisfies the constraints specified for std::exception::what().

### Standard exceptions

- `logic_error`

  - `invalid_argument`
  - `domain_error`
  - `length_error`
  - `out_of_range`
  - `future_error` (since C++11)

- `runtime_error`

  - `range_error`
  - `overflow_error`
  - `underflow_error`
  - `regex_error` (since C++11)
  - `system_error` (since C++11)
    - `ios_base::failure` (since C++11)
    - `filesystem::filesystem_error` (since C++17)
  - `tx_exception` (TM TS)
  - `nonexistent_local_time` (since C++20)
  - `ambiguous_local_time` (since C++20)
  - `format_error` (since C++20)

- `bad_typeid`
- `bad_cast`

  - `bad_any_cast` (since C++17)

- `bad_optional_access` (since C++17)
- `bad_expected_access` (since C++23)
- `bad_weak_ptr` (since C++11)
- `bad_function_call` (since C++11)
- `bad_alloc`

  - `bad_array_new_length` (since C++11)

- `bad_exception`
- `ios_base::failure` (until C++11)
- `bad_variant_access` (since C++17)

### Notes

Feature-test macro | Value | Std | Feature
--- | --- | --- | ---
`__cpp_lib_constexpr_exceptions` | `202411L` | (C++26) | constexpr for exception types

### Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR | Applied to | Behavior as published | Correct behavior
--- | --- | --- | ---
LWG 471 | C++98 | there was no requirement on standard library classes derived from `std::exception` | added

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/error/exception&oldid=177874"