Cześć.
Szukając dzisiaj demanglera do C++ (bo trafiały się fajne krzaczki), znalazłem na SO ten kod:
std::string demangle(const char* mangled)
{
int status;
std::unique_ptr<char[], void (*)(void*)> result(
abi::__cxa_demangle(mangled, 0, 0, &status), std::free);
return result.get() ? std::string(result.get()) : "error occurred";
}
Pobawiłem się nim trochę i nasuwają mi się dwa pytania.
- Czy nie można krócej i prościej zrobić tego tak (może tu jest jakiś UB?) ?
std::string demangle(const char* mangled){
int status;
std::unique_ptr<char[]> result(abi::__cxa_demangle(mangled, 0, 0, &status));
return !status ? result.get() : "error occurred";
}
2. Czemu gdy w pierszym argumencie do template'a unique_ptr dam char*, zamiast char[] dostaję no matching function for call ...? Z tego co widziałem, to abi::cxx__demangle zwraca char*