title: Why does GCC give me an error: no unique final overrider?
body: <p>In the code below, I get the following warning and error:</p>
  
  <pre><code>test.cpp:15: warning: direct base 'B' inaccessible in 'D' due to ambiguity
  test.cpp:15: error: no unique final overrider for 'virtual void A::f()' in 'D'
  </code></pre>
  
  <p>But if I remove the virtual inheritance of B from A (i.e. <code>struct B : public A</code>), I only get the warning, no error.</p>
  
  <pre><code>struct A
  {
    virtual void f() = 0;
  };
  
  struct B : public virtual A
  {
    void f() {}
  };
  
  class C : public B
  {};
  
  struct D : public C, virtual B
  {};
  
  int main()
  {
    return 0;
  }
  </code></pre>
  
  <p>Why? Is this the dreaded diamond?</p>