Sometimes getting and storing information about a type at runtime is required.
For such cases a construction like &typeid(T) or C++11 class std::type_index
is usually used, which is where problems start:

typeid(T) and
std::type_index require Run Time Type Info
(RTTI)

some implementations of typeid(T)
erroneously do not strip const, volatile and references from type

some compilers have bugs and do not correctly compare std::type_info
objects across shared libraries

only a few implementations of Standard Library currently provide std::type_index

no easy way to store type info without stripping const, volatile and references