5#ifndef DUNE_CLASSNAME_HH
6#define DUNE_CLASSNAME_HH
19#if __has_include(<cxxabi.h>) && !DISABLE_CXA_DEMANGLE
20#define HAVE_CXA_DEMANGLE 1
28 inline std::string demangle(std::string name)
32 std::unique_ptr<char, void(*)(
void*)>
33 demangled(abi::__cxa_demangle(name.c_str(),
nullptr,
nullptr, &status),
36 name = demangled.get();
49 typedef typename std::remove_reference<T>::type TR;
50 std::string
className = Impl::demangle(
typeid( TR ).name() );
51 if (std::is_const<TR>::value)
53 if (std::is_volatile<TR>::value)
55 if (std::is_lvalue_reference<T>::value)
57 else if (std::is_rvalue_reference<T>::value)
69 typedef typename std::remove_reference<T>::type TR;
70 std::string
className = Impl::demangle(
typeid(v).name() );
71 if (std::is_const<TR>::value)
73 if (std::is_volatile<TR>::value)
Dune namespace.
Definition: alignedallocator.hh:13
std::string className()
Provide the demangled class name of a type T as a string.
Definition: classname.hh:47