fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #define SUPER_BASE(name) \
  5. typedef name ThisClass; \
  6. typedef name Inherited;
  7.  
  8. #define SUPER(name) \
  9. typedef ThisClass Inherited; \
  10. typedef name ThisClass;
  11.  
  12. struct VeryBase
  13. {
  14. SUPER_BASE(VeryBase);
  15. };
  16.  
  17. struct Derived : public VeryBase
  18. {
  19. SUPER(Derived);
  20. };
  21.  
  22. struct MoreDerived : public Derived
  23. {
  24. SUPER(MoreDerived);
  25. };
  26.  
  27. void f(VeryBase) { cout << "VeryBase\n"; }
  28. void f(Derived) { cout << "Derived\n"; }
  29. void f(MoreDerived) { cout << "MoreDerived\n"; }
  30.  
  31. int main() {
  32.  
  33. f(MoreDerived::ThisClass());
  34. f(MoreDerived::Inherited());
  35.  
  36. f(Derived::ThisClass());
  37. f(Derived::Inherited());
  38.  
  39. return 0;
  40. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
MoreDerived
Derived
Derived
VeryBase