22 Diagnostics library [diagnostics]

22.5 System error support [syserr]

22.5.2 Class error_­category [syserr.errcat]

22.5.2.1 Class error_­category overview [syserr.errcat.overview]

Класс 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;
}

22.5.2.2 Class error_­category virtual members [syserr.errcat.virtuals]

virtual ~error_category();

Effects: Уничтожает объект класса error_­category.

virtual const char* name() const noexcept = 0;

Returns: Строка с названием категории ошибки.

virtual error_condition default_error_condition(int ev) const noexcept;

Returns: error_­condition(ev, *this).

virtual bool equivalent(int code, const error_condition& condition) const noexcept;

Returns: default_­error_­condition(code) == condition.

virtual bool equivalent(const error_code& code, int condition) const noexcept;

Returns: *this == code.category() && code.value() == condition.

virtual string message(int ev) const = 0;

Returns: Строка, описывающая состояние ошибки, обозначенное ev.

22.5.2.3 Class error_­category non-virtual members [syserr.errcat.nonvirtuals]

constexpr error_category() noexcept;

Effects: Создает объект класса error_­category.

bool operator==(const error_category& rhs) const noexcept;

Returns: this == &rhs.

bool operator!=(const error_category& rhs) const noexcept;

Returns: !(*this == rhs).

bool operator<(const error_category& rhs) const noexcept;

Returns: less<const error_­category*>()(this, &rhs).

[ Note: less обеспечивает полный порядок указателей. ] end note

22.5.2.4 Program defined classes derived from error_­category [syserr.errcat.derived]

virtual const char* name() const noexcept = 0;

Returns: Строка с названием категории ошибки.

virtual error_condition default_error_condition(int ev) const noexcept;

Returns: Объект типа error_­condition , соответствующего ev.

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;

Returns: true если для категории ошибки, представленной значком *this, code считается эквивалентным condition; в противном случае false.

22.5.2.5 Error category objects [syserr.errcat.objects]

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