type_name.hpp 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright 2019 Hans Dembinski
  2. //
  3. // Distributed under the Boost Software License, Version 1.0.
  4. // (See accompanying file LICENSE_1_0.txt
  5. // or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. #ifndef BOOST_HISTOGRAM_DETAIL_TYPE_NAME_HPP
  7. #define BOOST_HISTOGRAM_DETAIL_TYPE_NAME_HPP
  8. #include <boost/core/typeinfo.hpp>
  9. #include <boost/type.hpp>
  10. #include <string>
  11. namespace boost {
  12. namespace histogram {
  13. namespace detail {
  14. template <class T>
  15. std::string type_name_impl(boost::type<T>) {
  16. return boost::core::demangled_name(BOOST_CORE_TYPEID(T));
  17. }
  18. template <class T>
  19. std::string type_name_impl(boost::type<const T>) {
  20. return type_name_impl(boost::type<T>{}) + " const";
  21. }
  22. template <class T>
  23. std::string type_name_impl(boost::type<T&>) {
  24. return type_name_impl(boost::type<T>{}) + " &";
  25. }
  26. template <class T>
  27. std::string type_name_impl(boost::type<T&&>) {
  28. return type_name_impl(boost::type<T>{}) + " &&";
  29. }
  30. template <class T>
  31. std::string type_name() {
  32. return type_name_impl(boost::type<T>{});
  33. }
  34. } // namespace detail
  35. } // namespace histogram
  36. } // namespace boost
  37. #endif