namespace std {
class type_index;
template <class T> struct hash;
template<> struct hash<type_index>;
}
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]).
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()
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().