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]):
- default constructor (unless the class synopsis shows other constructors)
- 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, 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.