Files
2025-10-25 03:02:53 +03:00

206 lines
7.0 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[syserr.errcode]
# 19 Diagnostics library [[diagnostics]](./#diagnostics)
## 19.5 System error support [[syserr]](syserr#errcode)
### 19.5.4 Class error_code [syserr.errcode]
#### [19.5.4.1](#overview) Overview [[syserr.errcode.overview]](syserr.errcode.overview)
[1](#overview-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1009)
The class error_code describes an object used to hold error code
values, such as those originating from the operating system or other low-level
application program interfaces[.](#overview-1.sentence-1)
[*Note [1](#overview-note-1)*:
Class error_code is an
adjunct to error reporting by exception[.](#overview-1.sentence-2)
— *end note*]
[🔗](#lib:error_code)
namespace std {class error_code {public:// [[syserr.errcode.constructors]](#constructors "19.5.4.2Constructors"), constructors error_code() noexcept;
error_code(int val, const error_category& cat) noexcept; template<class ErrorCodeEnum> error_code(ErrorCodeEnum e) noexcept; // [[syserr.errcode.modifiers]](#modifiers "19.5.4.3Modifiers"), modifiersvoid assign(int val, const error_category& cat) noexcept; template<class ErrorCodeEnum> error_code& operator=(ErrorCodeEnum e) noexcept; void clear() noexcept; // [[syserr.errcode.observers]](#observers "19.5.4.4Observers"), observersint value() const noexcept; const error_category& category() const noexcept;
error_condition default_error_condition() const noexcept;
string message() const; explicit operator bool() const noexcept; private:int *val_*; // *exposition only*const error_category* *cat_*; // *exposition only*}; // [[syserr.errcode.nonmembers]](#nonmembers "19.5.4.5Non-member functions"), non-member functions error_code make_error_code(errc e) noexcept; template<class charT, class traits> basic_ostream<charT, traits>&operator<<(basic_ostream<charT, traits>& os, const error_code& ec);}
#### [19.5.4.2](#constructors) Constructors [[syserr.errcode.constructors]](syserr.errcode.constructors)
[🔗](#lib:error_code,constructor)
`error_code() noexcept;
`
[1](#constructors-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1064)
*Effects*: Initializes *val_* with 0 and *cat_* with &system_category()[.](#constructors-1.sentence-1)
[🔗](#lib:error_code,constructor_)
`error_code(int val, const error_category& cat) noexcept;
`
[2](#constructors-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1076)
*Effects*: Initializes *val_* with val and *cat_* with &cat[.](#constructors-2.sentence-1)
[🔗](#lib:error_code,constructor__)
`template<class ErrorCodeEnum>
error_code(ErrorCodeEnum e) noexcept;
`
[3](#constructors-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1089)
*Constraints*: [is_error_code_enum_v](system.error.syn#lib:is_error_code_enum_v "19.5.2Header <system_­error> synopsis[system.error.syn]")<ErrorCodeEnum> is true[.](#constructors-3.sentence-1)
[4](#constructors-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1093)
*Effects*: Equivalent to:error_code ec = make_error_code(e);
assign(ec.value(), ec.category());
#### [19.5.4.3](#modifiers) Modifiers [[syserr.errcode.modifiers]](syserr.errcode.modifiers)
[🔗](#lib:assign,error_code)
`void assign(int val, const error_category& cat) noexcept;
`
[1](#modifiers-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1110)
*Postconditions*: *val_* == val and *cat_* == &cat[.](#modifiers-1.sentence-1)
[🔗](#lib:operator=,error_code)
`template<class ErrorCodeEnum>
error_code& operator=(ErrorCodeEnum e) noexcept;
`
[2](#modifiers-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1122)
*Constraints*: [is_error_code_enum_v](system.error.syn#lib:is_error_code_enum_v "19.5.2Header <system_­error> synopsis[system.error.syn]")<ErrorCodeEnum> is true[.](#modifiers-2.sentence-1)
[3](#modifiers-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1126)
*Effects*: Equivalent to:error_code ec = make_error_code(e);
assign(ec.value(), ec.category());
[4](#modifiers-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1134)
*Returns*: *this[.](#modifiers-4.sentence-1)
[🔗](#lib:clear,error_code)
`void clear() noexcept;
`
[5](#modifiers-5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1145)
*Postconditions*: value() == 0 and category() == system_category()[.](#modifiers-5.sentence-1)
#### [19.5.4.4](#observers) Observers [[syserr.errcode.observers]](syserr.errcode.observers)
[🔗](#lib:value,error_code)
`int value() const noexcept;
`
[1](#observers-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1159)
*Returns*: *val_*[.](#observers-1.sentence-1)
[🔗](#lib:category,error_code)
`const error_category& category() const noexcept;
`
[2](#observers-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1170)
*Returns*: **cat_*[.](#observers-2.sentence-1)
[🔗](#lib:default_error_condition,error_code)
`error_condition default_error_condition() const noexcept;
`
[3](#observers-3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1181)
*Returns*: category().default_error_condition(value())[.](#observers-3.sentence-1)
[🔗](#lib:message,error_code)
`string message() const;
`
[4](#observers-4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1192)
*Returns*: category().message(value())[.](#observers-4.sentence-1)
[🔗](#lib:operator_bool,error_code)
`explicit operator bool() const noexcept;
`
[5](#observers-5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1203)
*Returns*: value() != 0[.](#observers-5.sentence-1)
#### [19.5.4.5](#nonmembers) Non-member functions [[syserr.errcode.nonmembers]](syserr.errcode.nonmembers)
[🔗](#lib:make_error_code,errc)
`error_code make_error_code(errc e) noexcept;
`
[1](#nonmembers-1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1216)
*Returns*: error_code(static_cast<int>(e), generic_category())[.](#nonmembers-1.sentence-1)
[🔗](#lib:operator%3c%3c,error_code)
`template<class charT, class traits>
basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const error_code& ec);
`
[2](#nonmembers-2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/diagnostics.tex#L1228)
*Effects*: Equivalent to: return os << ec.category().name() << ':' << ec.value();