______________________________________________________________________ 19 Diagnostics library [lib.diagnostics] ______________________________________________________________________ 1 This clause describes components that C++ programs may use to detect and report error conditions. 2 The following subclauses describe components for reporting several kinds of exceptional conditions, documenting program assertions, and a global variable for error number codes, as summarized in Table 1: Table 1--Diagnostics library summary +-----------------------------------------------------+ | Subclause Header(s) | +-----------------------------------------------------+ |_lib.std.exceptions_ Exception classes <stdexcept> | +-----------------------------------------------------+ |_lib.assertions_ Assertions <cassert> | +-----------------------------------------------------+ |_lib.errno_ Error numbers <cerrno> | +-----------------------------------------------------+ 19.1 Exception classes [lib.std.exceptions] 1 The Standard C++ library provides classes to be used to report certain errors (_lib.res.on.exception.handling_) in C++ programs. In the error model reflected in these classes, errors are divided into two broad categories: logic errors and runtime errors. 2 The distinguishing characteristic of logic errors is that they are due to errors in the internal logic of the program. In theory, they are preventable. 3 By contrast, runtime errors are due to events beyond the scope of the program. They cannot be easily predicted in advance. The header <stdexcept> defines several types of predefined exceptions for report- ing errors in a C++ program. These exceptions are related by inheri- tance. Header <stdexcept> synopsis 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.1.1 Class logic_error [lib.logic.error] namespace std { class logic_error : public exception { public: explicit logic_error(const string& what_arg); }; } 1 The class logic_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(const string& what_arg); Effects: Constructs an object of class logic_error. Postcondition: strcmp(what(), what_arg.c_str()) == 0. 19.1.2 Class domain_error [lib.domain.error] namespace std { class domain_error : public logic_error { public: explicit domain_error(const string& what_arg); }; } 1 The class domain_error defines the type of objects thrown as excep- tions by the implementation to report domain errors. domain_error(const string& what_arg); Effects: Constructs an object of class domain_error. Postcondition: strcmp(what(), what_arg.c_str()) == 0. 19.1.3 Class invalid_argument [lib.invalid.argument] namespace std { class invalid_argument : public logic_error { public: explicit invalid_argument(const string& what_arg); }; } 1 The class invalid_argument defines the type of objects thrown as exceptions to report an invalid argument. invalid_argument(const string& what_arg); Effects: Constructs an object of class invalid_argument. Postcondition: strcmp(what(), what_arg.c_str()) == 0. 19.1.4 Class length_error [lib.length.error] namespace std { class length_error : public logic_error { public: explicit length_error(const string& what_arg); }; } 1 The class length_error defines the type of objects thrown as excep- tions to report an attempt to produce an object whose length exceeds its maximum allowable size. length_error(const string& what_arg); Effects: Constructs an object of class length_error. Postcondition: strcmp(what(), what_arg.c_str()) == 0. 19.1.5 Class out_of_range [lib.out.of.range] namespace std { class out_of_range : public logic_error { public: explicit out_of_range(const string& what_arg); }; } 1 The class out_of_range defines the type of objects thrown as excep- tions to report an argument value not in its expected range. out_of_range(const string& what_arg); Effects: Constructs an object of class out_of_range. Postcondition: strcmp(what(), what_arg.c_str()) == 0. 19.1.6 Class runtime_error [lib.runtime.error] namespace std { class runtime_error : public exception { public: explicit runtime_error(const string& what_arg); }; } 1 The class runtime_error defines the type of objects thrown as excep- tions to report errors presumably detectable only when the program executes. runtime_error(const string& what_arg); Effects: Constructs an object of class runtime_error. Postcondition: strcmp(what(), what_arg.c_str()) == 0. 19.1.7 Class range_error [lib.range.error] namespace std { class range_error : public runtime_error { public: explicit range_error(const string& what_arg); }; } 1 The class range_error defines the type of objects thrown as exceptions to report range errors in internal computations. range_error(const string& what_arg); Effects: Constructs an object of class range_error. Postcondition: strcmp(what(), what_arg.c_str()) == 0. 19.1.8 Class overflow_error [lib.overflow.error] namespace std { class overflow_error : public runtime_error { public: explicit overflow_error(const string& what_arg); }; } 1 The class overflow_error defines the type of objects thrown as excep- tions to report an arithmetic overflow error. overflow_error(const string& what_arg); Effects: Constructs an object of class overflow_error. Postcondition: strcmp(what(), what_arg.c_str()) == 0. 19.1.9 Class underflow_error [lib.underflow.error] namespace std { class underflow_error : public runtime_error { public: explicit underflow_error(const string& what_arg); }; } 1 The class underflow_error defines the type of objects thrown as excep- tions to report an arithmetic underflow error. underflow_error(const string& what_arg); Effects: Constructs an object of class underflow_error. Postcondition: strcmp(what(), what_arg.c_str()) == 0. 19.2 Assertions [lib.assertions] 1 Provides macros for documenting C++ program assertions, and for dis- abling the assertion checks. 2 Header <cassert> (Table 2): Table 2--Header <cassert> synopsis +--------------------+ | Type Name(s) | +--------------------+ |Macro: assert | +--------------------+ 3 The contents are the same as the Standard C library header <assert.h>. SEE ALSO: ISO C subclause 7.2. 19.3 Error numbers [lib.errno] 1 Header <cerrno> (Table 3): Table 3--Header <cerrno> synopsis +--------------------------------+ | Type Name(s) | +--------------------------------+ |Macros: EDOM ERANGE errno | +--------------------------------+ 2 The contents are the same as the Standard C library header <errno.h>. SEE ALSO: ISO C subclause 7.1.4, 7.2, Amendment 1 subclause 4.3.