title: Why is copy constructor called instead of conversion constructor?
body: <p>So basically this code:</p>
  
  <pre><code>class A {
  };
  class B { 
     B (const B&amp; b) {}
  public: 
     B (){}
     B (const A&amp; a) {} 
  };
  
  int main()
  {
     A a;
     B b1(a);  //OK
     B b2 = a; //Error
  }
  </code></pre>
  
  <p>only generates an error for <code>B b2 = a</code>. And that error is</p>
  
  <blockquote>
    <p>error: ‘B::B(const B&amp;)’ is private</p>
  </blockquote>
  
  <p>Why is it attempting to call the copy constructor in addition to the direct conversion constructor?</p>
  
  <p>It's clear from the error message that a temporary <code>B</code> is created which is then used for copy-construction, but why? Where is this in the standard?</p>