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.  
  32. int main()
  33. {
  34. PRINT_NAME_OF_TYPE(1)
  35. PRINT_NAME_OF_TYPE(1.)
  36. PRINT_NAME_OF_TYPE(1.f)
  37. PRINT_NAME_OF_TYPE(1L)
  38. PRINT_NAME_OF_TYPE(1LL)
  39. PRINT_NAME_OF_TYPE(1U)
  40. PRINT_NAME_OF_TYPE("1")
  41. }
  42.  
Success #stdin #stdout 0s 3432KB
stdin
Standard input is empty
stdout
int
double
float
long
long long
unsigned int
char [2]