Заголовок <typeinfo> определяет тип, связанный с информацией о типе, созданной реализацией. Он также определяет два типа сообщений об ошибках идентификации динамического типа.
namespace std { class type_info; class bad_cast; class bad_typeid; }
См. Также: [expr.dynamic.cast], [expr.typeid].
namespace std { class type_info { public: virtual ~type_info(); bool operator==(const type_info& rhs) const noexcept; bool operator!=(const type_info& rhs) const noexcept; bool before(const type_info& rhs) const noexcept; size_t hash_code() const noexcept; const char* name() const noexcept; type_info(const type_info& rhs) = delete; // cannot be copied type_info& operator=(const type_info& rhs) = delete; // cannot be copied }; }
Класс type_info описывает информацию о типе, созданную реализацией. Объекты этого класса эффективно хранят указатель на имя типа и закодированное значение, подходящее для сравнения двух типов на равенство или порядок сортировки. Имена, правила кодирования и последовательность сортировки для типов не определены и могут отличаться в зависимости от программы.
bool operator==(const type_info& rhs) const noexcept;
bool operator!=(const type_info& rhs) const noexcept;
bool before(const type_info& rhs) const noexcept;
size_t hash_code() const noexcept;
Returns: Неуказанное значение, за исключением того, что в рамках одного выполнения программы оно должно возвращать одно и то же значение для любых двух type_info сравниваемых объектов.
Remarks: Реализация должна возвращать разные значения для двух type_info объектов, которые не равны для сравнения.
const char* name() const noexcept;
Remarks: Сообщение может быть форматом null-terminated multibyte string, подходящим для преобразования и отображенным как wstring ([string.classes], [locale.codecvt])
namespace std { class bad_cast : public exception { public: bad_cast() noexcept; bad_cast(const bad_cast&) noexcept; bad_cast& operator=(const bad_cast&) noexcept; const char* what() const noexcept override; }; }
Класс bad_cast определяет тип объектов, создаваемых реализацией как исключения для сообщения о выполнении недопустимого dynamic_cast выражения ([expr.dynamic.cast]).
bad_cast() noexcept;
bad_cast(const bad_cast&) noexcept;
bad_cast& operator=(const bad_cast&) noexcept;
const char* what() const noexcept override;
Remarks: Сообщение может быть форматом null-terminated multibyte string, подходящим для преобразования и отображенным как wstring ([string.classes], [locale.codecvt])
namespace std { class bad_typeid : public exception { public: bad_typeid() noexcept; bad_typeid(const bad_typeid&) noexcept; bad_typeid& operator=(const bad_typeid&) noexcept; const char* what() const noexcept override; }; }
Класс bad_typeid определяет тип объектов, создаваемых реализацией как исключения для сообщения о нулевом указателе в typeid выражении ([expr.typeid]).
bad_typeid() noexcept;
bad_typeid(const bad_typeid&) noexcept;
bad_typeid& operator=(const bad_typeid&) noexcept;
const char* what() const noexcept override;
Remarks: Сообщение может быть форматом null-terminated multibyte string, подходящим для преобразования и отображенным как wstring ([string.classes], [locale.codecvt])