360 lines
13 KiB
Markdown
360 lines
13 KiB
Markdown
[std.exceptions]
|
||
|
||
# 19 Diagnostics library [[diagnostics]](./#diagnostics)
|
||
|
||
## 19.2 Exception classes [std.exceptions]
|
||
|
||
### [19.2.1](#general) General [[std.exceptions.general]](std.exceptions.general)
|
||
|
||
[1](#general-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L31)
|
||
|
||
The C++ standard library provides classes to be used to report certain errors ([[res.on.exception.handling]](res.on.exception.handling "16.4.6.14 Restrictions on exception handling")) in
|
||
C++ programs[.](#general-1.sentence-1)
|
||
|
||
In the error model reflected in these classes, errors are divided into two
|
||
broad categories:[*logic*](#def:logic) errors and[*runtime*](#def:runtime) errors[.](#general-1.sentence-2)
|
||
|
||
[2](#general-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L41)
|
||
|
||
The distinguishing characteristic of logic errors is that they are due to errors
|
||
in the internal logic of the program[.](#general-2.sentence-1)
|
||
|
||
In theory, they are preventable[.](#general-2.sentence-2)
|
||
|
||
[3](#general-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L46)
|
||
|
||
By contrast, runtime errors are due to events beyond the scope of the program[.](#general-3.sentence-1)
|
||
|
||
They cannot be easily predicted in advance[.](#general-3.sentence-2)
|
||
|
||
The header <stdexcept> defines several types of predefined exceptions for reporting errors in a C++ program[.](#general-3.sentence-3)
|
||
|
||
These exceptions are related by inheritance[.](#general-3.sentence-4)
|
||
|
||
### [19.2.2](#stdexcept.syn) Header <stdexcept> synopsis [[stdexcept.syn]](stdexcept.syn)
|
||
|
||
[ð](#lib:logic_error)
|
||
|
||
namespace std {class logic_error; class domain_error; class invalid_argument; class length_error; class out_of_range; class runtime_error; class range_error; class overflow_error; class underflow_error;}
|
||
|
||
### [19.2.3](#logic.error) Class logic_error [[logic.error]](logic.error)
|
||
|
||
[ð](#lib:logic_error_)
|
||
|
||
namespace std {class logic_error : public exception {public:constexpr explicit logic_error(const string& what_arg); constexpr explicit logic_error(const char* what_arg); };}
|
||
|
||
[1](#logic.error-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L91)
|
||
|
||
The classlogic_error defines the type of objects thrown as
|
||
exceptions to report errors presumably detectable before
|
||
the program executes, such as violations of logical preconditions or class
|
||
invariants[.](#logic.error-1.sentence-1)
|
||
|
||
[ð](#lib:logic_error,constructor)
|
||
|
||
`constexpr logic_error(const string& what_arg);
|
||
`
|
||
|
||
[2](#logic.error-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L105)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg.c_str()) == 0[.](#logic.error-2.sentence-1)
|
||
|
||
[ð](#lib:logic_error,constructor_)
|
||
|
||
`constexpr logic_error(const char* what_arg);
|
||
`
|
||
|
||
[3](#logic.error-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L116)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg) == 0[.](#logic.error-3.sentence-1)
|
||
|
||
### [19.2.4](#domain.error) Class domain_error [[domain.error]](domain.error)
|
||
|
||
[ð](#lib:domain_error_)
|
||
|
||
namespace std {class domain_error : public logic_error {public:constexpr explicit domain_error(const string& what_arg); constexpr explicit domain_error(const char* what_arg); };}
|
||
|
||
[1](#domain.error-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L134)
|
||
|
||
The classdomain_error defines the type of objects thrown as
|
||
exceptions by the implementation to report domain errors[.](#domain.error-1.sentence-1)
|
||
|
||
[ð](#lib:domain_error,constructor)
|
||
|
||
`constexpr domain_error(const string& what_arg);
|
||
`
|
||
|
||
[2](#domain.error-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L146)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg.c_str()) == 0[.](#domain.error-2.sentence-1)
|
||
|
||
[ð](#lib:domain_error,constructor_)
|
||
|
||
`constexpr domain_error(const char* what_arg);
|
||
`
|
||
|
||
[3](#domain.error-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L157)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg) == 0[.](#domain.error-3.sentence-1)
|
||
|
||
### [19.2.5](#invalid.argument) Class invalid_argument [[invalid.argument]](invalid.argument)
|
||
|
||
[ð](#lib:invalid_argument_)
|
||
|
||
namespace std {class invalid_argument : public logic_error {public:constexpr explicit invalid_argument(const string& what_arg); constexpr explicit invalid_argument(const char* what_arg); };}
|
||
|
||
[1](#invalid.argument-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L175)
|
||
|
||
The classinvalid_argument defines the type of objects thrown as exceptions to report an invalid argument[.](#invalid.argument-1.sentence-1)
|
||
|
||
[ð](#lib:invalid_argument,constructor)
|
||
|
||
`constexpr invalid_argument(const string& what_arg);
|
||
`
|
||
|
||
[2](#invalid.argument-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L186)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg.c_str()) == 0[.](#invalid.argument-2.sentence-1)
|
||
|
||
[ð](#lib:invalid_argument,constructor_)
|
||
|
||
`constexpr invalid_argument(const char* what_arg);
|
||
`
|
||
|
||
[3](#invalid.argument-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L197)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg) == 0[.](#invalid.argument-3.sentence-1)
|
||
|
||
### [19.2.6](#length.error) Class length_error [[length.error]](length.error)
|
||
|
||
[ð](#lib:length_error_)
|
||
|
||
namespace std {class length_error : public logic_error {public:constexpr explicit length_error(const string& what_arg); constexpr explicit length_error(const char* what_arg); };}
|
||
|
||
[1](#length.error-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L215)
|
||
|
||
The classlength_error defines the type of objects thrown as exceptions
|
||
to report an attempt to produce
|
||
an object whose length exceeds its maximum allowable size[.](#length.error-1.sentence-1)
|
||
|
||
[ð](#lib:length_error,constructor)
|
||
|
||
`constexpr length_error(const string& what_arg);
|
||
`
|
||
|
||
[2](#length.error-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L228)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg.c_str()) == 0[.](#length.error-2.sentence-1)
|
||
|
||
[ð](#lib:length_error,constructor_)
|
||
|
||
`constexpr length_error(const char* what_arg);
|
||
`
|
||
|
||
[3](#length.error-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L239)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg) == 0[.](#length.error-3.sentence-1)
|
||
|
||
### [19.2.7](#out.of.range) Class out_of_range [[out.of.range]](out.of.range)
|
||
|
||
[ð](#lib:out_of_range_)
|
||
|
||
namespace std {class out_of_range : public logic_error {public:constexpr explicit out_of_range(const string& what_arg); constexpr explicit out_of_range(const char* what_arg); };}
|
||
|
||
[1](#out.of.range-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L257)
|
||
|
||
The classout_of_range defines the type of objects thrown as exceptions to report an
|
||
argument value not in its expected range[.](#out.of.range-1.sentence-1)
|
||
|
||
[ð](#lib:out_of_range,constructor)
|
||
|
||
`constexpr out_of_range(const string& what_arg);
|
||
`
|
||
|
||
[2](#out.of.range-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L270)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg.c_str()) == 0[.](#out.of.range-2.sentence-1)
|
||
|
||
[ð](#lib:out_of_range,constructor_)
|
||
|
||
`constexpr out_of_range(const char* what_arg);
|
||
`
|
||
|
||
[3](#out.of.range-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L281)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg) == 0[.](#out.of.range-3.sentence-1)
|
||
|
||
### [19.2.8](#runtime.error) Class runtime_error [[runtime.error]](runtime.error)
|
||
|
||
[ð](#lib:runtime_error_)
|
||
|
||
namespace std {class runtime_error : public exception {public:constexpr explicit runtime_error(const string& what_arg); constexpr explicit runtime_error(const char* what_arg); };}
|
||
|
||
[1](#runtime.error-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L299)
|
||
|
||
The classruntime_error defines the type of objects thrown as exceptions to report errors presumably detectable only
|
||
when the program executes[.](#runtime.error-1.sentence-1)
|
||
|
||
[ð](#lib:runtime_error,constructor)
|
||
|
||
`constexpr runtime_error(const string& what_arg);
|
||
`
|
||
|
||
[2](#runtime.error-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L311)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg.c_str()) == 0[.](#runtime.error-2.sentence-1)
|
||
|
||
[ð](#lib:runtime_error,constructor_)
|
||
|
||
`constexpr runtime_error(const char* what_arg);
|
||
`
|
||
|
||
[3](#runtime.error-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L322)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg) == 0[.](#runtime.error-3.sentence-1)
|
||
|
||
### [19.2.9](#range.error) Class range_error [[range.error]](range.error)
|
||
|
||
[ð](#lib:range_error_)
|
||
|
||
namespace std {class range_error : public runtime_error {public:constexpr explicit range_error(const string& what_arg); constexpr explicit range_error(const char* what_arg); };}
|
||
|
||
[1](#range.error-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L340)
|
||
|
||
The classrange_error defines the type of objects thrown as exceptions to report range errors
|
||
in internal computations[.](#range.error-1.sentence-1)
|
||
|
||
[ð](#lib:range_error,constructor)
|
||
|
||
`constexpr range_error(const string& what_arg);
|
||
`
|
||
|
||
[2](#range.error-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L352)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg.c_str()) == 0[.](#range.error-2.sentence-1)
|
||
|
||
[ð](#lib:range_error,constructor_)
|
||
|
||
`constexpr range_error(const char* what_arg);
|
||
`
|
||
|
||
[3](#range.error-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L363)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg) == 0[.](#range.error-3.sentence-1)
|
||
|
||
### [19.2.10](#overflow.error) Class overflow_error [[overflow.error]](overflow.error)
|
||
|
||
[ð](#lib:overflow_error_)
|
||
|
||
namespace std {class overflow_error : public runtime_error {public:constexpr explicit overflow_error(const string& what_arg); constexpr explicit overflow_error(const char* what_arg); };}
|
||
|
||
[1](#overflow.error-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L381)
|
||
|
||
The classoverflow_error defines the type of objects thrown as exceptions to report an arithmetic overflow error[.](#overflow.error-1.sentence-1)
|
||
|
||
[ð](#lib:overflow_error,constructor)
|
||
|
||
`constexpr overflow_error(const string& what_arg);
|
||
`
|
||
|
||
[2](#overflow.error-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L392)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg.c_str()) == 0[.](#overflow.error-2.sentence-1)
|
||
|
||
[ð](#lib:overflow_error,constructor_)
|
||
|
||
`constexpr overflow_error(const char* what_arg);
|
||
`
|
||
|
||
[3](#overflow.error-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L403)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg) == 0[.](#overflow.error-3.sentence-1)
|
||
|
||
### [19.2.11](#underflow.error) Class underflow_error [[underflow.error]](underflow.error)
|
||
|
||
[ð](#lib:underflow_error_)
|
||
|
||
namespace std {class underflow_error : public runtime_error {public:constexpr explicit underflow_error(const string& what_arg); constexpr explicit underflow_error(const char* what_arg); };}
|
||
|
||
[1](#underflow.error-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L421)
|
||
|
||
The classunderflow_error defines the type of objects thrown as exceptions to report an arithmetic underflow error[.](#underflow.error-1.sentence-1)
|
||
|
||
[ð](#lib:underflow_error,constructor)
|
||
|
||
`constexpr underflow_error(const string& what_arg);
|
||
`
|
||
|
||
[2](#underflow.error-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L432)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg.c_str()) == 0[.](#underflow.error-2.sentence-1)
|
||
|
||
[ð](#lib:underflow_error,constructor_)
|
||
|
||
`constexpr underflow_error(const char* what_arg);
|
||
`
|
||
|
||
[3](#underflow.error-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L443)
|
||
|
||
*Postconditions*: strcmp(what(), what_arg) == 0[.](#underflow.error-3.sentence-1)
|