title: Deriving implementation of pure virtual function
body: <p>Consider following example</p>
  <pre><code>#include &lt;iostream&gt;
  
  struct PureVirtual {
      virtual void Function() = 0;
  };
  
  struct FunctionImpl {
      virtual void Function() {
          std::cout &lt;&lt; &quot;FunctionImpl::Function()&quot; &lt;&lt; std::endl;
      }   
  };
  
  struct NonPureVirtual : public FunctionImpl, public PureVirtual {
      using FunctionImpl::Function;
  };
  
  int main() {
      NonPureVirtual c;
      c.Function();
  }
  </code></pre>
  <p>Compiler (GCC 4.9, Clang 3.5) exits with error</p>
  <pre><code>test.cpp:18:20: error: variable type 'NonPureVirtual' is an abstract class
      NonPureVirtual c;
                     ^
  test.cpp:4:18: note: unimplemented pure virtual method 'Function' in 'NonPureVirtual'
      virtual void Function() = 0;
                   ^
  </code></pre>
  <p>But when I don't derive form <code>PureVirtual</code> everything is OK. This is weird because Standard  <em>10.4.4</em> says</p>
  <blockquote>
  <p>A class is abstract if it contains or inherits at least one pure
  virtual function for which the final overrider is pure virtual.</p>
  </blockquote>
  <p>They are not saying anything about what the <em>final overrider</em> is but I suppose it should be <code>FunctionImpl::Function()</code> especially when I made it available through <code>using</code> directive. So why is still <code>NonPureVirtual</code> abstract class and how can I fix this.</p>