fork download
  1. #include <cxxabi.h>
  2. #include <string>
  3. #include <typeinfo>
  4. #include <cassert>
  5. #include <cstdlib>
  6. #include <iostream>
  7.  
  8. const std::string demangle(const char* const mangledTypeName) {
  9. int resultStatus = -4;
  10. const char* const result = abi::__cxa_demangle( mangledTypeName, 0, 0, &resultStatus );
  11. std::string demangledTypeName;
  12. const bool noError = (0 == resultStatus);
  13. const bool demangledSuccess = (noError && result != 0);
  14. assert(demangledSuccess);
  15. demangledTypeName = (demangledSuccess ? result : "Unknown type.");
  16. free(const_cast<char*>(result));
  17. return demangledTypeName;
  18. }
  19.  
  20. const std::string demangle(const std::string& mangledTypeName) {
  21. return demangle(mangledTypeName.c_str());
  22. }
  23.  
  24. const std::string demangledNameOfType(const std::type_info& type_id) {
  25. return demangle(type_id.name());
  26. }
  27.  
  28. #define DEMANGLED_NAME_OF_TYPE(TypeOrValue) (demangledNameOfType(typeid(TypeOrValue)))
  29. #define PRINT_NAME_OF_TYPE(TypeOrValue) {std::cout<<DEMANGLED_NAME_OF_TYPE(TypeOrValue)<<std::endl;}
  30.  
  31. int main()
  32. {
  33. PRINT_NAME_OF_TYPE( 'a' );
  34. PRINT_NAME_OF_TYPE( 'a1' );
  35. }
Success #stdin #stdout 0s 2984KB
stdin
Standard input is empty
stdout
char
int