1 #ifndef C10_UTIL_TYPE_H_ 2 #define C10_UTIL_TYPE_H_ 3 4 #include <cstddef> 5 #include <string> 6 #ifdef __GXX_RTTI 7 #include <typeinfo> 8 #endif // __GXX_RTTI 9 10 #include <c10/macros/Macros.h> 11 12 namespace c10 { 13 14 /// Utility to demangle a C++ symbol name. 15 C10_API std::string demangle(const char* name); 16 17 /// Returns the printable name of the type. 18 template <typename T> demangle_type()19inline const char* demangle_type() { 20 #ifdef __GXX_RTTI 21 static const auto& name = *(new std::string(demangle(typeid(T).name()))); 22 return name.c_str(); 23 #else // __GXX_RTTI 24 return "(RTTI disabled, cannot show name)"; 25 #endif // __GXX_RTTI 26 } 27 28 } // namespace c10 29 30 #endif // C10_UTIL_TYPE_H_ 31