Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <typeinfo>
- #include <string_view>
- template <class T>
- constexpr std::string_view type_name()
- {
- using namespace std;
- #ifdef __clang__
- string_view p = __PRETTY_FUNCTION__;
- return string_view(p.data() + 34, p.size() - 34 - 1);
- #elif defined(__GNUC__)
- string_view p = __PRETTY_FUNCTION__;
- # if __cplusplus < 201402
- return string_view(p.data() + 36, p.size() - 36 - 1);
- # else
- return string_view(p.data() + 49, p.find(';', 49) - 49);
- # endif
- #elif defined(_MSC_VER)
- string_view p = __FUNCSIG__;
- return string_view(p.data() + 84, p.size() - 84 - 7);
- #endif
- }
- using namespace std;
- template<typename T>
- void f(T& param)
- {
- cout << "type_name<decltype(param)>() = " << type_name<decltype(param)>() << endl;
- cout << "type_name<T>() = " << type_name<T>() << endl;
- cout << endl;
- }
- int main()
- {
- int x = 5;
- const int y = x;
- const int& z = x;
- f(x);
- f(y);
- f(z);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement