title: Multiple inheritance and pure virtual functions
body: <p>The following code:</p>
  
  <pre><code>struct interface_base
  {
      virtual void foo() = 0;
  };
  
  struct interface : public interface_base
  {
      virtual void bar() = 0;
  };
  
  struct implementation_base : public interface_base
  {
      void foo();
  };
  
  struct implementation : public implementation_base, public interface
  {   
      void bar();
  };
  
  int main()
  {
      implementation x;
  }
  </code></pre>
  
  <p>fails to compile with the following errors:</p>
  
  <pre><code>test.cpp: In function 'int main()':
  test.cpp:23:20: error: cannot declare variable 'x' to be of abstract type 'implementation'
  test.cpp:16:8: note:   because the following virtual functions are pure within 'implementation':
  test.cpp:3:18: note:    virtual void interface_base::foo()
  </code></pre>
  
  <p>I have played around with it and figured out that making the 'interface -> interface_base' and 'implementation_base -> interface_base' inheritances virtual, fixes the problem, but I don't understand why. Can someone please explain what is going on?</p>
  
  <p>p.s. I omitted the virtual destructors on purpose to make the code shorter. Please don't tell me to put them in, I already know :)</p>