Класс error_category служит базовым классом для типов, используемых для идентификации источника и кодирования конкретной категории кода ошибки. Классы могут быть производными error_category для поддержки категорий ошибок в дополнение к тем, которые определены в этом международном стандарте. Такие классы должны вести себя, как указано в этом подпункте. [ Note: error_category объекты передаются по ссылке, и два таких объекта равны, если у них одинаковый адрес. Это означает, что приложения, использующие настраиваемые error_category типы, должны создавать по одному объекту каждого такого типа. ] — end note
namespace std { class error_category { public: constexpr error_category() noexcept; virtual ~error_category(); error_category(const error_category&) = delete; error_category& operator=(const error_category&) = delete; virtual const char* name() const noexcept = 0; virtual error_condition default_error_condition(int ev) const noexcept; virtual bool equivalent(int code, const error_condition& condition) const noexcept; virtual bool equivalent(const error_code& code, int condition) const noexcept; virtual string message(int ev) const = 0; bool operator==(const error_category& rhs) const noexcept; bool operator!=(const error_category& rhs) const noexcept; bool operator<(const error_category& rhs) const noexcept; }; const error_category& generic_category() noexcept; const error_category& system_category() noexcept; }
virtual ~error_category();
virtual const char* name() const noexcept = 0;
virtual error_condition default_error_condition(int ev) const noexcept;
virtual bool equivalent(int code, const error_condition& condition) const noexcept;
virtual bool equivalent(const error_code& code, int condition) const noexcept;
virtual string message(int ev) const = 0;
constexpr error_category() noexcept;
bool operator==(const error_category& rhs) const noexcept;
bool operator!=(const error_category& rhs) const noexcept;
bool operator<(const error_category& rhs) const noexcept;
virtual const char* name() const noexcept = 0;
virtual error_condition default_error_condition(int ev) const noexcept;
virtual bool equivalent(int code, const error_condition& condition) const noexcept;
Returns: true если для категории ошибки, представленной значком *this, code считается эквивалентным condition; в противном случае false.
virtual bool equivalent(const error_code& code, int condition) const noexcept;
const error_category& generic_category() noexcept;
Returns: Ссылка на объект типа, производного от класса error_category. Все вызовы этой функции должны возвращать ссылки на один и тот же объект.
Remarks: Объектные default_error_condition и equivalent виртуальные функции должны вести себя, как указано для класса error_category. name Виртуальная функция объекта должна возвращать указатель на строку "generic".
const error_category& system_category() noexcept;
Returns: Ссылка на объект типа, производного от класса error_category. Все вызовы этой функции должны возвращать ссылки на один и тот же объект.
Remarks: equivalent Виртуальные функции объекта должны вести себя, как указано для класса error_category. name Виртуальная функция объекта должна возвращать указатель на строку "system". default_error_condition Виртуальная функция объекта должна вести себя следующим образом:
Если аргумент ev соответствует errno значению POSIX posv, функция должна вернуться error_condition(posv, generic_category()). В противном случае функция вернется error_condition(ev, system_category()). Что составляет соответствие для той или иной операционной системы, не определено. [ Note: Количество кодов потенциальных системных ошибок велико и неограниченно, и некоторые из них могут не соответствовать какому-либо errno значению POSIX . Таким образом, реализациям предоставляется свобода в определении соответствия. ] — end note