17 Language support library [support] (original) (raw)

17.9 Exception handling [support.exception]

17.9.3 Class exception [exception]

namespace std { class exception { public: constexpr exception() noexcept;constexpr exception(const exception&) noexcept;constexpr exception& operator=(const exception&) noexcept;constexpr virtual ~exception();constexpr virtual const char* what() const noexcept;};}

The classexceptiondefines the base class for the types of objects thrown as exceptions by C++ standard library components, and certain expressions, to report errors detected during program execution.

Except where explicitly specified otherwise, each standard library class T that derives from class exceptionhas the following publicly accessible member functions, each of them having a non-throwing exception specification ([except.spec]):

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, thenstrcmp(lhs.what(), rhs.what()) is equal to 0.

The what() member function of each such T satisfies the constraints specified for exception​::​what() (see below).

constexpr exception(const exception& rhs) noexcept;constexpr exception& operator=(const exception& rhs) noexcept;

Postconditions: If *this and rhs both have dynamic type exceptionthen the value of the expression strcmp(what(), rhs.what()) shall equal 0.

constexpr virtual ~exception();

Effects: Destroys an object of classexception.

constexpr virtual const char* what() const noexcept;

Returns: An implementation-defined ntbs, which during constant evaluation is encoded with the ordinary literal encoding ([lex.ccon]).

The return value remains valid until the exception object from which it is obtained is destroyed or a non-constmember function of the exception object is called.