Init
This commit is contained in:
359
cppdraft/std/exceptions.md
Normal file
359
cppdraft/std/exceptions.md
Normal file
@@ -0,0 +1,359 @@
|
||||
[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)
|
||||
Reference in New Issue
Block a user