title: virtual inheritance from base struct
body: <pre><code>struct A {
  int i;
  virtual void f() { cout &lt;&lt; i; }
  A() { i = 1; }
  A(int _i) : i(_i) {}
  };
  
  struct B : A {
  B() : A(2) { f(); }
  void f() { cout &lt;&lt; i+10; }
  };
  
  struct C : B, virtual A {
  C() : A() {}
  };
  </code></pre>
  
  <p>Can you please explain why in the C structure there will be two <strong>A::i</strong> and why there will be two <strong>vptr</strong> pointers to 'virtual tables methods' for <strong>C</strong> structure although <strong>A</strong> only has virtual method ?
  I know when there is virtual inheritance from a common base there will be one instance of the common base not two ,Please advise!</p>