Radfler

::gcc_demangle

Jan 3rd, 2020 (edited)
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.62 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <cxxabi.h>
  3. #include <memory>
  4. #include <stdexcept>
  5. #include <string>
  6.  
  7. std::string gcc_demangle(const char* mangled) {
  8.     std::size_t length;
  9.     int status;
  10.  
  11.     std::unique_ptr<char[], void(*)(char*)> demangled{
  12.         abi::__cxa_demangle(mangled, nullptr, &length, &status),
  13.         [](char* p) { std::free(p); }
  14.     };
  15.    
  16.     switch(status) {
  17.     case -1:
  18.         throw std::bad_alloc{};
  19.     case -2:
  20.     case -3:
  21.         throw std::invalid_argument{"::gcc_demangle"};
  22.     case 0:
  23.         return std::string{demangled.get(), length};
  24.     default:
  25.         std::abort();
  26.     }
  27. }
Add Comment
Please, Sign In to add comment