#include <cstdlib>
#include <typeinfo>
-#ifdef __GNUC__
-#include <cxxabi.h>
-#endif
-
#include "pbd/libpbd_visibility.h"
namespace PBD
{
- template<typename T> /*LIBPBD_API*/
- std::string demangled_name (T const & obj)
- {
-#ifdef __GNUC__
- int status;
- char * res = abi::__cxa_demangle (typeid(obj).name(), 0, 0, &status);
- if (status == 0) {
- std::string s(res);
- free (res);
- return s;
- }
-#endif
-
- /* Note: on win32, you can use UnDecorateSymbolName.
- See http://msdn.microsoft.com/en-us/library/ms681400%28VS.85%29.aspx
- See also: http://msdn.microsoft.com/en-us/library/ms680344%28VS.85%29.aspx
- */
-
- return typeid(obj).name();
- }
- /**
- * @param symbol a mangled symbol/name
- * @return a demangled symbol/name
- */
- LIBPBD_API std::string demangle_symbol(const std::string& symbol);
-
- /**
- * @param str a string containing a mangled symbol/name
- * @return a string with the mangled symbol/name replaced with a demangled
- * name
- */
- LIBPBD_API std::string demangle(const std::string& str);
+/**
+ * @param symbol a mangled symbol/name
+ * @return a demangled symbol/name
+ */
+LIBPBD_API std::string demangle_symbol(const std::string& symbol);
+
+/**
+ * @param str a string containing a mangled symbol/name
+ * @return a string with the mangled symbol/name replaced with a demangled
+ * name
+ */
+LIBPBD_API std::string demangle(const std::string& str);
+
+template <typename T>
+std::string demangled_name(T const& obj)
+{
+ return demangle_symbol(typeid(obj).name());
+}
} // namespace