title: Should I use std::move or std::forward in move ctors/assignment operators?
body: <p>Unless I'm wrong it seems like either works just fine - is there a best practice reason to prefer one over the other?</p>
  
  <p>Example:</p>
  
  <pre><code>struct A
  {
      A(){}
      A(const A&amp;){ std::cout &lt;&lt; "A(const A&amp;)\n"; }
      A(A&amp;&amp;){ std::cout &lt;&lt; "A(A&amp;&amp;)\n"; }
  };
  
  struct B
  {
      B(){}
      B(const B&amp; right) : x(right.x){ std::cout &lt;&lt; "B(const B&amp;)\n"; }
      B(B&amp;&amp; right) : x(std::forward&lt;A&gt;(right.x)){ std::cout &lt;&lt; "B(B&amp;&amp;)\n"; }
  
      A x;
  };
  
  struct C
  {
      C(){}
      C(const C&amp; right) : x(right.x){ std::cout &lt;&lt; "C(const C&amp;)\n"; }
      C(C&amp;&amp; right) : x(std::move(right.x)){ std::cout &lt;&lt; "C(C&amp;&amp;)\n"; }
  
      A x;
  };
  
  struct D
  {
      D(){}
      D(const D&amp; right) : x(right.x){ std::cout &lt;&lt; "D(const D&amp;)\n"; }
      D(D&amp;&amp; right) : x(right.x){ std::cout &lt;&lt; "D(D&amp;&amp;)\n"; }
  
      A x;
  };
  
  int main()
  {
      std::cout &lt;&lt; "--- B Test ---\n";
      B b1;
      B b2(std::move(b1));
      std::cout &lt;&lt; "--- C Test ---\n";
      C c1;
      C c2(std::move(c1));
      std::cout &lt;&lt; "--- D Test ---\n";
      D d1;
      D d2(std::move(d1));
  }
  </code></pre>
  
  <p>Output:</p>
  
  <pre><code>--- B Test ---
  A(A&amp;&amp;)
  B(B&amp;&amp;)
  --- C Test ---
  A(A&amp;&amp;)
  C(C&amp;&amp;)
  --- D Test ---
  A(const A&amp;)
  D(D&amp;&amp;)
  </code></pre>