#include <iostream>
#include <cxxabi.h>
#include <memory>
#include <string>
std::string demangle(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;
}
template <typename T>
void print_function_name(T func) {
std::cout << "Function name: " << demangle(typeid(func).name()) << std::endl;
}
void simple_function() {}
class MyClass {
public:
void member_function() {}
};
int main() {
print_function_name(simple_function);
print_function_name(&MyClass::member_function);
return 0;
}