fork download
  1. #include <iostream>
  2. #include <typeinfo>
  3. using namespace std;
  4.  
  5. struct Foo { virtual Foo* c() {return this;} };
  6. struct Bar : public Foo { Bar* c() {return this;} };
  7.  
  8. int main() {
  9. Foo f;
  10. Foo* fp;
  11. Bar b;
  12. Bar* bp;
  13.  
  14. cout << typeid(f).name() << "\n";
  15. cout << typeid(fp).name() << "\n";
  16. cout << typeid(b).name() << "\n";
  17. cout << typeid(bp).name() << "\n";
  18. cout << typeid(f.c()).name() << "\n";
  19. cout << typeid(b.c()).name() << "\n";
  20.  
  21. fp = &f;
  22. bp = &b;
  23.  
  24. cout << typeid(fp->c()).name() << "\n";
  25. cout << typeid(bp->c()).name() << "\n";
  26.  
  27. fp = &b;
  28.  
  29. cout << typeid(fp->c()).name() << "\n";
  30. cout << typeid(*fp->c()).name() << "\n";
  31.  
  32. return 0;
  33. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
3Foo
P3Foo
3Bar
P3Bar
P3Foo
P3Bar
P3Foo
P3Bar
P3Foo
3Bar