20 General utilities library [utilities]

20.14 Class type_index [type.index]

20.14.1 Header <typeindex> synopsis [type.index.synopsis]

namespace std {
  class type_index;
  template <class T> struct hash;
  template<> struct hash<type_index>;
}

20.14.2 type_index overview [type.index.overview]

namespace std {
  class type_index {
  public:
    type_index(const type_info& rhs) noexcept;
    bool operator==(const type_index& rhs) const noexcept;
    bool operator!=(const type_index& rhs) const noexcept;
    bool operator< (const type_index& rhs) const noexcept;
    bool operator<= (const type_index& rhs) const noexcept;
    bool operator> (const type_index& rhs) const noexcept;
    bool operator>= (const type_index& rhs) const noexcept;
    size_t hash_code() const noexcept;
    const char* name() const noexcept;
  private:
    const type_info* target;    // exposition only
    // Note that the use of a pointer here, rather than a reference,
    // means that the default copy/move constructor and assignment
    // operators will be provided and work as expected.
  };
}

The class type_index provides a simple wrapper for type_info which can be used as an index type in associative containers ([associative]) and in unordered associative containers ([unord]).

20.14.3 type_index members [type.index.members]

type_index(const type_info& rhs) noexcept;

Effects: constructs a type_index object, the equivalent of target = &rhs.

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

Returns: *target == *rhs.target

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

Returns: *target != *rhs.target

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

Returns: target->before(*rhs.target)

bool operator<=(const type_index& rhs) const noexcept;

Returns: !rhs.target->before(*target)

bool operator>(const type_index& rhs) const noexcept;

Returns: rhs.target->before(*target)

bool operator>=(const type_index& rhs) const noexcept;

Returns: !target->before(*rhs.target)

size_t hash_code() const noexcept;

Returns: target->hash_code()

const char* name() const noexcept;

Returns: target->name()

20.14.4 Hash support [type.index.hash]

template <> struct hash<type_index>;

The template specialization shall meet the requirements of class template hash ([unord.hash]). For an object index of type type_index, hash<type_index>()(index) shall evaluate to the same result as index.hash_code().