fork download
  1. #include <iostream>
  2. #include <typeinfo>
  3. using namespace std;
  4. template <class C> struct MakeAlias : C{ typedef C Base; };
  5. class StackTrace{
  6. public:
  7. static int var;
  8. virtual ~StackTrace() {}
  9. template <class T> void printStackTrace(T* c){
  10. if(typeid(T)==typeid(StackTrace))return;
  11. cout << typeid(T).name() << "." << endl;
  12. class T::Base *V;
  13. printStackTrace(V);
  14. }
  15. void printStackTrace(StackTrace *c)
  16. {
  17. cout << typeid(StackTrace).name() << "." << endl;
  18. }
  19. };
  20. class A : public MakeAlias<StackTrace>{
  21. };
  22. class B : public MakeAlias<A>{
  23. };
  24. class C : public MakeAlias<B>{
  25. public:
  26. void hello(){
  27. cout << "hello from ";
  28. StackTrace::printStackTrace(this);
  29. cout << endl;
  30. }
  31.  
  32. };
  33. int main(){
  34. C c;
  35. c.hello();
  36. }
Success #stdin #stdout 0s 3296KB
stdin
Standard input is empty
stdout
hello from 1C.
1B.
1A.
10StackTrace.