title: Multiple (diamond) inheritance compiles without "virtual", but doesn't with
body: <p>Given the following code (without virtual inheritance) : </p>
  
  <pre><code>class A
  {
  public:
      virtual void f() = 0;
  };
  
  class B : public A
  {
   public:
      virtual void f() {}
  };
  
  class C : public A
  {
   public:
      virtual void f() {}
  };
  
  class D : public B, public C
  {
  
  /* some code */
  };
  
  
  int main()
  {
      D d;
      return 0;
  }
  </code></pre>
  
  <p>the code compile.</p>
  
  <p>On the other hand , here : </p>
  
  <pre><code>class A
  {
  public:
      virtual void f() = 0;
  };
  
  class B : virtual public A
  {
      virtual void f() {}
  };
  
  class C : virtual public A
  {
      virtual void f() {}
  };
  
  class D : public B, public C
  {
      /* some code */
  };
  
  
  int main()
  {
      D d;
      return 0;
  }
  </code></pre>
  
  <p>The compiler presents a compilation error:</p>
  
  <pre><code>no unique final overrider for 'virtual void A::f()' in 'D' . 
  </code></pre>
  
  <p>Why is it different in the second code ? </p>