|
|
Defined in header <stdexcept> | ||
class range_error; | ||
Defines a type of object to be thrown as exception. It can be used to report range errors (that is, situations where a result of a computation cannot be represented by the destination type).
The only standard library components that throw this exception arestd::wstring_convert::from_bytes andstd::wstring_convert::to_bytes.
The mathematical functions in the standard library components do not throw this exception (mathematical functions report range errors as specified inmath_errhandling).
All member functions ofstd::range_error areconstexpr: it is possible to create and usestd::range_error objects in the evaluation of a constant expression.However, | (since C++26) |
Inheritance diagram
Contents |
(constructor) | constructs a newrange_error object with the given message(public member function) |
operator= | replaces therange_error object(public member function) |
range_error(conststd::string& what_arg); | (1) | (constexpr since C++26) |
range_error(constchar* what_arg); | (2) | (constexpr since C++26) |
range_error(const range_error& other); | (3) | (noexcept since C++11) (constexpr since C++26) |
std::range_error
thenstd::strcmp(what(), other.what())==0. No exception can be thrown from the copy constructor.what_arg | - | explanatory string |
other | - | another exception object to copy |
Because copyingstd::range_error
is not permitted to throw exceptions, this message is typically stored internally as a separately-allocated reference-counted string. This is also why there is no constructor takingstd::string&&
: it would have to copy the content anyway.
Before the resolution ofLWG issue 254, the non-copy constructor can only acceptstd::string. It makes dynamic allocation mandatory in order to construct astd::string object.
After the resolution ofLWG issue 471, a derived standard exception class must have a publicly accessible copy constructor. It can be implicitly defined as long as the explanatory strings obtained bywhat()
are the same for the original object and the copied object.
range_error& operator=(const range_error& other); | (noexcept since C++11) (constexpr since C++26) | |
Assigns the contents with those ofother. If*this andother both have dynamic typestd::range_error
thenstd::strcmp(what(), other.what())==0 after assignment. No exception can be thrown from the copy assignment operator.
other | - | another exception object to assign with |
*this
After the resolution ofLWG issue 471, a derived standard exception class must have a publicly accessible copy assignment operator. It can be implicitly defined as long as the explanatory strings obtained bywhat()
are the same for the original object and the copied object.
[virtual] | destroys the exception object (virtual public member function of std::exception )[edit] |
[virtual] | returns an explanatory string (virtual public member function of std::exception )[edit] |
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_constexpr_exceptions | 202502L | (C++26) | constexpr exception types |
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 254 | C++98 | the constructor acceptingconstchar* was missing | added |
LWG 471 | C++98 | the explanatory strings ofstd::range_error 'scopies were implementation-defined | they are the same as that of the original std::range_error object |