fork(2) download
  1. #include<iostream>
  2. #include<typeinfo>
  3. #include<cxxabi.h>
  4. using namespace std;
  5.  
  6. template<typename T>
  7. const char* realname (T &obj)
  8. {
  9. return abi::__cxa_demangle(typeid(obj).name(), 0, 0, 0);
  10. }
  11.  
  12.  
  13. template<typename T>
  14. struct ActualType { typedef T type; };
  15. template<typename T>
  16. struct ActualType<T*> { typedef typename ActualType<T>::type type; };
  17.  
  18. template<class Pointer>
  19. struct A
  20. {
  21. typename ActualType<Pointer>::type obj;
  22.  
  23. void print ()
  24. {
  25. cout << "realname(obj) = " << realname(obj) << endl;
  26. }
  27. };
  28.  
  29. int main ()
  30. {
  31. A<int> a1;
  32. A<int*> a2;
  33. A<int**> a3;
  34.  
  35. a1.print();
  36. a2.print();
  37. a3.print();
  38. }
  39.  
Success #stdin #stdout 0.01s 2812KB
stdin
Standard input is empty
stdout
realname(obj) = int
realname(obj) = int
realname(obj) = int