The string representation of a type is implementation defined in C++, for example the following code produce the different output with MSVC, GCC and CLang:
#include <string> #include <iostream> struct A {}; class B {}; namespace ns { struct X {}; } int main() { std::cout << typeid(A).name() << ", " << typeid(B).name() << ", " << typeid(ns::X).name() << ", " << typeid(std::string).name() << std::endl; return 0; }
MSVC:
struct A, class B, struct ns::X, class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >
GCC:
1A, 1B, N2ns1XE, NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
CLang:
1A, 1B, N2ns1XE, NSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE
To compile the sample code with MSVC run the compiler with the following options:
cl /std:c++latest /EHsc a.cpp