Skip to content

Instantly share code, notes, and snippets.

@kikairoya
Created January 12, 2012 07:19
Show Gist options
  • Save kikairoya/1599215 to your computer and use it in GitHub Desktop.
Save kikairoya/1599215 to your computer and use it in GitHub Desktop.
#ifdef __GNUG__
#include <cxxabi.h>
std::string demangle(const std::string &s) {
int r;
char *const p = abi::__cxa_demangle(s.c_str(), 0, 0, &r);
if (r) return s;
try {
const std::string x(p);
free(p);
p = 0;
return x;
} catch (...) {
free(p);
throw; // or return s;
}
}
#else
std::string demangle(const std::string &s) { return s; }
#endif
#ifdef __GNUG__
#include <cxxabi.h>
std::string demangle(const std::string &s) {
struct default_free { void operator ()(char *p) const { free(p); } };
int r;
std::unique_ptr<char, default_free> d(abi::__cxa_demangle(s.c_str(), 0, 0, &r));
return r ? s : std::string(d.get());
}
#else
std::string demangle(const std::string &s) { return s; }
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment