title: Pass by value or rvalue-ref
body: <p>For move enabled classes is there a difference between this two? </p>
  
  <pre><code>struct Foo {
  typedef std::vector&lt;std::string&gt; Vectype;
  Vectype m_vec;
  //this or
  void bar(Vectype&amp;&amp; vec)
  {
     m_vec = std::move(vec);
  }
  //that
  void bar(Vectype vec)
  {
      m_vec = std::move(vec);
  }
  };
  int main()
  {
     Vectype myvec{"alpha","beta","gamma"};
     Foo fool; 
     fool.bar(std::move(myvec));
  }
  </code></pre>
  
  <p>My understanding is that if you use a lvalue <code>myvec</code> you also required to introduce <code>const
  Vectype&amp;</code> version of <code>Foo::bar()</code> since <code>Vectype&amp;&amp;</code> won't bind. That's aside, in the rvalue case, <code>Foo::bar(Vectype)</code> will construct the vector using the move constructor or better yet elide the copy all together seeing vec is an rvalue (would it?). So is there a compelling reason to not to prefer by value declaration instead of lvalue and rvalue overloads?
  (Consider I need to copy the vector to the member variable in any case.)</p>