title: Move constructor bypasses copy constructor
body: <p>As expected the following does not compile:</p>
  
  <pre><code>class A {
  public:
      A() = default;
      //A(A&amp;&amp;) = default;
      A(const A&amp;) = delete;
      int x;
  };
  
  int main()
  {
      auto a4 = A{}; // not ok, copy constructor is deleted
      auto a5 = A(); // not ok, copy constructor is deleted
      return 0;
  }
  </code></pre>
  
  <p>But if a move constructor is added, even with the copy constructor explicitly deleted, then the following does compile:</p>
  
  <pre><code>class A {
  public:
      A() = default;
      A(A&amp;&amp;) = default;
      A(const A&amp;) = delete;
      int x;
  };
  
  int main()
  {
      auto a4 = A{}; // now ok, even though copy constructor is deleted
      auto a5 = A(); // now ok, even though copy constructor is deleted
      return 0;
  }
  </code></pre>
  
  <p>Why isn't the deleted copy constructor considered?</p>