#include <iostream>
#include <cxxabi.h>
#include <memory>
#include <typeinfo>
template <typename T>
std::string demangle_type_name(const char* mangled_name) {
int status;
std::unique_ptr<char, void(*)(void*)> result(
abi::__cxa_demangle(mangled_name, nullptr, nullptr, &status),
std::free
);
return (status == 0) ? result.get() : mangled_name;
}
class MyClass {};
int main() {
std::cout << "Mangled name: " << typeid(MyClass).name() << std::endl;
std::cout << "Demangled name: " << demangle_type_name<MyClass>(typeid(MyClass).name()) << std::endl;
return 0;
}