#include <boost/core/typeinfo.hpp>
#include <boost/type.hpp>
-#include <sstream>
#include <string>
namespace boost {
namespace detail {
template <class T>
-std::ostream& type_name_impl(std::ostream& os, boost::type<T>) {
- os << boost::core::demangled_name(BOOST_CORE_TYPEID(T));
- return os;
+std::string type_name_impl(boost::type<T>) {
+ return boost::core::demangled_name(BOOST_CORE_TYPEID(T));
}
template <class T>
-std::ostream& type_name_impl(std::ostream& os, boost::type<const T>) {
- return type_name_impl(os, boost::type<T>{}) << " const";
+std::string type_name_impl(boost::type<const T>) {
+ return type_name_impl(boost::type<T>{}) + " const";
}
template <class T>
-std::ostream& type_name_impl(std::ostream& os, boost::type<T&>) {
- return type_name_impl(os, boost::type<T>{}) << "&";
+std::string type_name_impl(boost::type<T&>) {
+ return type_name_impl(boost::type<T>{}) + " &";
}
template <class T>
-std::ostream& type_name_impl(std::ostream& os, boost::type<T&&>) {
- return type_name_impl(os, boost::type<T>{}) << "&&";
+std::string type_name_impl(boost::type<T&&>) {
+ return type_name_impl(boost::type<T>{}) + " &&";
}
template <class T>
std::string type_name() {
- std::ostringstream os;
- type_name_impl(os, boost::type<T>{});
- return os.str();
+ return type_name_impl(boost::type<T>{});
}
} // namespace detail