22 Diagnostics library [diagnostics]

22.5 System error support [syserr]

22.5.3 Class error_­code [syserr.errcode]

22.5.3.1 Class error_­code overview [syserr.errcode.overview]

Класс error_­code описывает объект, используемый для хранения значений кодов ошибок, например, исходящих из операционной системы или других низкоуровневых программных интерфейсов приложений. [ Note: Класс error_­code является дополнением к сообщениям об ошибках по исключениям. ] end note

namespace std {
  class error_code {
  public:
    // [syserr.errcode.constructors], 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
    void assign(int val, const error_category& cat) noexcept;
    template <class ErrorCodeEnum>
      error_code& operator=(ErrorCodeEnum e) noexcept;
    void clear() noexcept;

    // [syserr.errcode.observers], observers
    int 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], 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);
}

22.5.3.2 Class error_­code constructors [syserr.errcode.constructors]

error_code() noexcept;

Effects: Создает объект типа error_­code.

Postconditions: val_­ == 0 и cat_­ == &system_­category().

error_code(int val, const error_category& cat) noexcept;

Effects: Создает объект типа error_­code.

Postconditions: val_­ == val и cat_­ == &cat.

template <class ErrorCodeEnum> error_code(ErrorCodeEnum e) noexcept;

Effects: Создает объект типа error_­code.

Postconditions: *this == make_­error_­code(e).

Remarks: Этот конструктор не должен участвовать в разрешении перегрузки , если
is_­error_­code_­enum_­v<ErrorCodeEnum> не true.

22.5.3.3 Class error_­code modifiers [syserr.errcode.modifiers]

void assign(int val, const error_category& cat) noexcept;

Postconditions: val_­ == val и cat_­ == &cat.

template <class ErrorCodeEnum> error_code& operator=(ErrorCodeEnum e) noexcept;

Postconditions: *this == make_­error_­code(e).

Returns: *this.

Remarks: Этот оператор не должен участвовать в разрешении перегрузки , если
is_­error_­code_­enum_­v<ErrorCodeEnum> не true.

void clear() noexcept;

Postconditions: value() == 0 и category() == system_­category().

22.5.3.4 Class error_­code observers [syserr.errcode.observers]

int value() const noexcept;

Returns: val_­.

const error_category& category() const noexcept;

Returns: *cat_­.

error_condition default_error_condition() const noexcept;

Returns: category().default_­error_­condition(value()).

string message() const;

Returns: category().message(value()).

explicit operator bool() const noexcept;

Returns: value() != 0.

22.5.3.5 Class error_­code non-member functions [syserr.errcode.nonmembers]

error_code make_error_code(errc e) noexcept;

Returns: error_­code(static_­cast<int>(e), generic_­category()).

template <class charT, class traits> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const error_code& ec);

Effects: Как будто по: os << ec.category().name() << ':' << ec.value();