fork(2) download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. #include <typeinfo>
  5. #include <cstdlib>
  6. #include <memory>
  7. #include <cxxabi.h>
  8.  
  9. template <typename T> std::string TypeName(const T &)
  10. {
  11. auto name = typeid(T).name();
  12. int status = -4;
  13. std::unique_ptr<char, void(*)(void*)> res {
  14. abi::__cxa_demangle(name, NULL, NULL, &status),
  15. std::free
  16. };
  17. return (status==0) ? res.get() : name ;
  18. }
  19.  
  20. template <typename char_type, size_t LENGTH>
  21. std::basic_string<char_type> literal(const char (&value)[LENGTH])
  22. {
  23. using string = std::basic_string<char_type>;
  24.  
  25. string result{};
  26. result.reserve(LENGTH);
  27.  
  28. std::copy(std::begin(value), std::end(value), std::back_inserter(result));
  29.  
  30. return result;
  31. }
  32.  
  33. int main()
  34. {
  35. std::cout << TypeName(literal<char>("test")) << '\n';
  36. std::cout << TypeName(literal<char32_t>("test")) << '\n';
  37. std::cout << TypeName(literal<char16_t>("test")) << '\n';
  38.  
  39. return 0;
  40. }
Success #stdin #stdout 0s 3464KB
stdin
Standard input is empty
stdout
std::string
std::basic_string<char32_t, std::char_traits<char32_t>, std::allocator<char32_t> >
std::basic_string<char16_t, std::char_traits<char16_t>, std::allocator<char16_t> >