The result of a typeid expression is an lvalue of static type
conststd::type_info and dynamic type conststd::type_info or constname where name is an
implementation-defined class publicly derived from
std::type_info which preserves the behavior described
The lifetime of the object referred to by the lvalue extends to the end
of the program.
Whether or not the destructor is called for the
std::type_info object at the end of the program is unspecified.
When typeid is applied to a glvalue whose type is a
polymorphic class type ([class.virtual]), the result refers to a
std::type_info object representing the type of the most derived
object ([intro.object]) (that is, the dynamic type) to which the