43#ifndef _DWMTYPENAME_HH_
44#define _DWMTYPENAME_HH_
51 char *__cxa_demangle(const char *, char *, size_t *, int *);
86 int demangleStatus = -1;
88 abi::__cxa_demangle(
typeid(x).name(), 0, 0, &demangleStatus);
90 if (demangleStatus == 0) {
92 if (rc ==
"unsigned") {
100 if (demangleStatus == -2) {
101 rc = BuiltinTypeName<T>();
111 template <
typename T>
116 char *demangledName =
117 __cxa_demangle(
typeid(x).name(), 0, 0, &demangleStatus);
119 if (demangleStatus == 0) {
121 if (rc ==
"unsigned") {
129 if (demangleStatus == -2) {
130 rc = BuiltinTypeName<T>();
134 std::string::size_type idx = rc.find_last_of(
"::");
135 if (idx != rc.npos) {
136 rc = rc.substr(idx + 1);
145 template <
typename T>
150 char *demangledName =
151 __cxa_demangle(
typeid(T).name(), 0, 0, &demangleStatus);
153 if (demangleStatus == 0) {
160 if (demangleStatus == -2) {
161 rc = BuiltinTypeName<T>();
std::string TypeName(const T &x)
Returns the name of type T.
Definition DwmTypeName.hh:83
std::string TypeNameNoNamespace(const T &x)
Returns the name of type T, sans its namespace.
Definition DwmTypeName.hh:112
std::string BuiltinTypeName(const std::type_info &typeInfo)
Returns a string holding the demangled name for the given typeInfo.