#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
using namespace std;
class Base {
public :
virtual void Test(){}
int a;
};
class Sub : public Base {
public :
virtual void Test(){}
int b;
};
#define class_name( X ) demangle( typeid(X).name() )
std::string demangle( const char* str){
int status;
return abi::__cxa_demangle( str , 0,0,&status );
}
int main(){
Base* pBase = new Sub;
int i;
int status;
cout << class_name( status ) << endl;
cout << class_name( pBase ) << endl;
cout << class_name( *pBase ) << endl;
return 0;
}