3 #include <Core/CoreMacros.hpp>
14 #include <Core/Utils/StringUtils.hpp>
22 const char* demangleType() noexcept;
26 const
char* demangleType( const T& ) noexcept;
33 template <typename... Ts>
36 namespace TypeListInternal {
42 template <
typename ListT,
typename... Ts>
49 template <
typename... Ts,
typename... OtherTs>
51 using type = TypeList<Ts..., OtherTs...>;
58 template <
typename... Ts,
typename... OtherTs>
60 using type = TypeList<Ts..., OtherTs...>;
65 template <
typename... Ts>
68 using Self = TypeList;
70 static constexpr
size_t Size =
sizeof...( Ts );
87 template <
typename... TypesToAppend>
94 const char* demangleType() noexcept {
95 static auto demangled_name = []() {
96 std::string retval {
typeid( T ).name() };
97 removeAllInString( retval,
"class " );
98 removeAllInString( retval,
"struct " );
99 replaceAllInString( retval,
",",
", " );
100 replaceAllInString( retval,
"> >",
">>" );
104 return demangled_name.data();
107 template <
typename T>
108 const char* demangleType() noexcept {
110 static auto demangled_name = []() {
113 char* name = abi::__cxa_demangle(
typeid( T ).name(), 0, 0, &error );
120 retval =
"memory allocation failed";
123 retval =
"not a valid mangled name";
126 retval =
"__cxa_demangle failed";
130 removeAllInString( retval,
"__1::" );
131 replaceAllInString( retval,
"> >",
">>" );
135 return demangled_name.data();
139 template <
typename T>
140 const char* demangleType(
const T& ) noexcept {
141 return demangleType<T>();
Append any number of types to a TypeList.