From [expr.typeid]/1:
The result of a typeid
expression is an lvalue of static type const std::type_info
and dynamic type const std::type_info
or const
name where name is an implementation-defined class publicly
derived from std::type_info which preserves the behavior described
in [type.info]. [...]
the name is implementation-defined.
[type.info]/1 specifically mentions that [emphasis mine]:
The class type_info
describes type information generated by the
implementation. Objects of this class effectively store a pointer to
a name for the type, and an encoded value suitable for comparing two
types for equality or collating order. The names, encoding rule, and
collating sequence for types are all unspecified and may differ
between programs.
the name for the type pointed to is unspecified and may vary not only between implementations but even between programs (from the same implementation).