thunk.cc 633 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. // { dg-do run }
  2. #include <assert.h>
  3. struct A {
  4. A():value(123) {}
  5. int value;
  6. virtual int access() { return this->value; }
  7. };
  8. struct B {
  9. B():value(456) {}
  10. int value;
  11. virtual int access() { return this->value; }
  12. };
  13. struct C : public A, public B {
  14. C():better_value(789) {}
  15. int better_value;
  16. virtual int access() { return this->better_value; }
  17. };
  18. struct D: public C {
  19. D():other_value(987) {}
  20. int other_value;
  21. virtual int access() { return this->other_value; }
  22. };
  23. int use(B *b)
  24. {
  25. return b->access();
  26. }
  27. int main()
  28. {
  29. C c;
  30. assert(use(&c) == 789);
  31. D d;
  32. assert(use(&d) == 987);
  33. return 0;
  34. }