32#pragma GCC system_header
35#if __cplusplus >= 201103L
39#pragma GCC visibility push(default)
41#if __cplusplus >= 202100L
42# define __cpp_lib_constexpr_typeinfo 202106L
49 class __class_type_info;
70#ifndef __GXX_MERGED_TYPEINFO_NAMES
72#define __GXX_MERGED_TYPEINFO_NAMES 0
76#ifndef __GXX_TYPEINFO_EQUALITY_INLINE
78 #define __GXX_TYPEINFO_EQUALITY_INLINE 0
80 #define __GXX_TYPEINFO_EQUALITY_INLINE 1
103 const char*
name() const _GLIBCXX_NOEXCEPT
104 {
return __name[0] ==
'*' ? __name + 1 : __name; }
111 bool operator==(
const type_info& __arg)
const _GLIBCXX_NOEXCEPT;
113#if __cpp_impl_three_way_comparison < 201907L
114 bool operator!=(
const type_info& __arg)
const _GLIBCXX_NOEXCEPT
115 {
return !operator==(__arg); }
118#if __cplusplus >= 201103L
119 size_t hash_code() const noexcept
121# if !__GXX_MERGED_TYPEINFO_NAMES
122 return _Hash_bytes(
name(), __builtin_strlen(
name()),
123 static_cast<size_t>(0xc70f6907UL));
125 return reinterpret_cast<size_t>(__name);
131 virtual bool __is_pointer_p()
const;
134 virtual bool __is_function_p()
const;
142 virtual bool __do_catch(
const type_info *__thr_type,
void **__thr_obj,
143 unsigned __outer)
const;
146 virtual bool __do_upcast(
const __cxxabiv1::__class_type_info *__target,
147 void **__obj_ptr)
const;
152 explicit type_info(
const char *__n): __name(__n) { }
156#if __cplusplus >= 201103L
157 type_info& operator=(
const type_info&) =
delete;
158 type_info(
const type_info&) =
delete;
160 type_info& operator=(
const type_info&);
161 type_info(
const type_info&);
164#if ! __GXX_TYPEINFO_EQUALITY_INLINE
165 bool __equal(
const type_info&)
const _GLIBCXX_NOEXCEPT;
169#if __GXX_TYPEINFO_EQUALITY_INLINE
173#if !__GXX_MERGED_TYPEINFO_NAMES
177 if (__name[0] !=
'*' || __arg.__name[0] !=
'*')
178 return __builtin_strcmp (__name, __arg.__name) < 0;
187 return __name < __arg.__name;
191#if __GXX_TYPEINFO_EQUALITY_INLINE || __cplusplus > 202002L
192 _GLIBCXX23_CONSTEXPR
inline bool
193 type_info::operator==(
const type_info& __arg)
const _GLIBCXX_NOEXCEPT
195 if (std::__is_constant_evaluated())
196 return this == &__arg;
198 if (__name == __arg.__name)
201#if !__GXX_TYPEINFO_EQUALITY_INLINE
203 return __equal(__arg);
204#elif !__GXX_MERGED_TYPEINFO_NAMES
206 return __name[0] !=
'*' && __builtin_strcmp (__name, __arg.name()) == 0;
223 bad_cast() _GLIBCXX_USE_NOEXCEPT { }
227 virtual ~bad_cast() _GLIBCXX_USE_NOEXCEPT;
230 virtual const char*
what() const _GLIBCXX_USE_NOEXCEPT;
247 virtual const char*
what() const _GLIBCXX_USE_NOEXCEPT;
253#pragma GCC visibility pop
ISO C++ entities toplevel namespace is std.
const char * name() const noexcept
bool before(const type_info &__arg) const noexcept
Thrown during incorrect typecasting.
virtual const char * what() const noexcept
Thrown when a NULL pointer in a typeid expression is used.
virtual const char * what() const noexcept
Base class for all library exceptions.