Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.52 KB | None | 0 0
  1. #include <iostream>
  2. #include <typeinfo>
  3. #include <string_view>
  4.  
  5. template <class T>
  6. constexpr std::string_view type_name()
  7. {
  8. using namespace std;
  9. #ifdef __clang__
  10. string_view p = __PRETTY_FUNCTION__;
  11. return string_view(p.data() + 34, p.size() - 34 - 1);
  12. #elif defined(__GNUC__)
  13. string_view p = __PRETTY_FUNCTION__;
  14. # if __cplusplus < 201402
  15. return string_view(p.data() + 36, p.size() - 36 - 1);
  16. # else
  17. return string_view(p.data() + 49, p.find(';', 49) - 49);
  18. # endif
  19. #elif defined(_MSC_VER)
  20. string_view p = __FUNCSIG__;
  21. return string_view(p.data() + 84, p.size() - 84 - 7);
  22. #endif
  23. }
  24.  
  25. using namespace std;
  26.  
  27. template<typename T>
  28. void f(T& param)
  29. {
  30. cout << "type_name<decltype(param)>() = " << type_name<decltype(param)>() << endl;
  31. cout << "type_name<T>() = " << type_name<T>() << endl;
  32. cout << endl;
  33. }
  34.  
  35. int main()
  36. {
  37. int x = 5;
  38. const int y = x;
  39. const int& z = x;
  40. f(x);
  41. f(y);
  42. f(z);
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement