fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct V {
  5. V(int i) {
  6. std::cout << "initialized v" << '\n';
  7. }
  8. };
  9.  
  10. struct A {
  11. A() {
  12. std::cout << "initialized a" << '\n';
  13. }
  14. };
  15.  
  16. struct B : virtual V, virtual A {
  17. B(int i) :V{i} {
  18. std::cout << "initialized b" << '\n';
  19. }
  20. };
  21.  
  22. class C : virtual V, virtual A {
  23. public:
  24. C(int i) : V{i} {
  25. std::cout << "initialized c" << '\n';
  26. }
  27. };
  28.  
  29. class D : virtual public B, virtual public C {
  30. public:
  31. D(int i, int j) :V{i}, B{i}, C{j} {
  32. std::cout << "initialized d" << '\n';
  33. }
  34. };
  35.  
  36. int main() {
  37. D* d = new D{3,3}; //ok
  38. B* b = new D{3,3}; //ok
  39. C* c = new D{3,3}; //undefined
  40. return 0;
  41. }
Success #stdin #stdout 0s 3228KB
stdin
Standard input is empty
stdout
initialized v
initialized a
initialized b
initialized c
initialized d
initialized v
initialized a
initialized b
initialized c
initialized d
initialized v
initialized a
initialized b
initialized c
initialized d