title: Why there is no implicitly generated move constructor?
body: <p>Say, I have a class with a movable resource as its member:</p>
  
  <pre><code>struct A {
    std::vector&lt;int&gt; v;
  };
  </code></pre>
  
  <p>There is an implicitly generated copy constructor, which works perfectly and is implemented roughly like this:</p>
  
  <pre><code>// Implicitly generated copy constructor
  A(const A&amp; rhs) : v(rhs.v) {};
  </code></pre>
  
  <p>And I expect a move constructor to be implicitly generated the same way in C++11:</p>
  
  <pre><code>// Move constructor is not implicitly generated, why?
  A(A&amp;&amp; rhs) : v(std::move(rhs.v)) {};
  </code></pre>
  
  <p>However, no move constructor is implicitly generated, at least in Visual Studio 2010. And a vector is copied in the following code:</p>
  
  <pre><code>A a;
  A b(std::move(a));  // a.v is copied, not moved
  </code></pre>
  
  <p>My question is - why? For my point of view, there is no difference for the compiler to implicitly generate copy of move constructor - it has full information for both of these.</p>
  
  <p>Or maybe move constructor <em>should</em> be generated by the standard, but Visual Studio doesn't do this?</p>
  
  <p><strong>Update</strong></p>
  
  <p>I debugged the code, and the <code>vector(const _Myt&amp; _Right)</code> constructor is called in <code>&lt;vector&gt;</code> file. When I write move constructor explicitly, the <code>vector(_Myt&amp;&amp; _Right)</code> constructor is called.</p>
  
  <p><strong>Update2</strong></p>
  
  <p>Just checked it: the same behavior in Visual Studio 2012 Update 1.</p>
  
  <p><strong>Update3</strong></p>
  
  <p>Ok, I agree this is a duplicate, but the link provided in the close reason is incorrect. Correct link is provided in the comments: <a href="https://stackoverflow.com/q/10201659/261217">Why is this copy constructor called rather than the move constructor?</a></p>
  
  <p>And here is why, from <a href="http://blogs.msdn.com/b/vcblog/archive/2011/09/12/10209291.aspx" rel="nofollow noreferrer">the VC blog</a>:</p>
  
  <blockquote>
    <p>Rvalue references v3.0 adds new rules to automatically generate move
    constructors and move assignment operators under certain conditions. 
    This will not be implemented in VC11, which will continue to follow
    VC10's behavior of never automatically generating move
    constructors/move assignment operators.  (As with all of the
    not-yet-implemented features here, this is due to time and resource
    constraints, and not due to dislike of the features themselves!)</p>
  </blockquote>