title: Why pure virtual mechanism doesn't consider inherited functions?
body: <p>Before asking, I had refer to this <a href="https://stackoverflow.com/questions/3518228/overwriting-pure-virtual-functions-by-using-a-separately-inherited-method">older question</a>. But I have still queries.</p>
  
  <pre><code>struct B1 {
    virtual void fun () = 0;
  };
  struct B2 {
    void fun () { cout&lt;&lt;"B2::fun()\n"; }
    void fun (int i) {}
  };
  struct D : B1, B2 {
    using B2::fun;  // This line doesn't help
  };
  
  int main ()
  {
    B1 *pB1 = new D;  // Error: cannot allocate 'D' because 'B1::fun()' is abstract
    pB1-&gt;fun();
  }
  </code></pre>
  
  <ol>
  <li>Any reason for C++ standard not accepting, inherited member functions to resolve <code>pure virtual</code> mechanism ?</li>
  <li>Why <code>using</code> keyword doesn't help resolving this error ? (compiler: linux-64 g++)</li>
  <li>Which function is used for <code>using</code> keyword, <code>B2::fun()</code> or <code>B2::fun(int)</code> ? (there is no ambiguity for that line)</li>
  </ol>