title: C++0x: rvalue reference versus non-const lvalue
body: <p>When programming in C++03, we can't pass an unnamed temporary <code>T()</code> to a function <code>void foo(T&amp;);</code>.  The usual solution is to give the temporary a name, and then pass it like:</p>
  
  <pre><code>T v;
  foo(v);
  </code></pre>
  
  <p>Now, along comes C++0x - and now with rvalue references, a function defined as <code>void foo(T&amp;&amp;)</code> will allow me to pass a temporary.  Which brings me to my question: since a function that takes an rvalue reference can take both rvalue references (unnamed temporaries) as well as lvalue references (named non-const references), is there any reason to use lvalue references anymore in function parameters?  Shouldn't we always use rvalues as function parameters?</p>
  
  <p>Granted, a function that takes an lvalue reference would <em>prevent</em> the caller from passing a temporary, but I'm not sure if that's a useful restriction.</p>