22 Diagnostics library [diagnostics]

22.5 System error support [syserr]

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

The class error_­category serves as a base class for types used to identify the source and encoding of a particular category of error code. Classes may be derived from error_­category to support categories of errors in addition to those defined in this International Standard. Such classes shall behave as specified in this subclause. [Note: error_­category objects are passed by reference, and two such objects are equal if they have the same address. This means that applications using custom error_­category types should create a single object of each such type. end note]

namespace std {
  class error_category {
    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;