Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdlib>
- #include <cxxabi.h>
- #include <memory>
- #include <stdexcept>
- #include <string>
- std::string gcc_demangle(const char* mangled) {
- std::size_t length;
- int status;
- std::unique_ptr<char[], void(*)(char*)> demangled{
- abi::__cxa_demangle(mangled, nullptr, &length, &status),
- [](char* p) { std::free(p); }
- };
- switch(status) {
- case -1:
- throw std::bad_alloc{};
- case -2:
- case -3:
- throw std::invalid_argument{"::gcc_demangle"};
- case 0:
- return std::string{demangled.get(), length};
- default:
- std::abort();
- }
- }
Add Comment
Please, Sign In to add comment