title: Is there a difference between universal references and forwarding references?
body: <p>An argument to this function will bind to an rvalue reference:  </p>
  
  <pre><code>void f(int &amp;&amp; i);
  </code></pre>
  
  <p>However, an argument to this function will bind to either an rvalue or an lvalue reference:  </p>
  
  <pre><code>template &lt;typename T&gt;  
  void f(T &amp;&amp; t);
  </code></pre>
  
  <p>I've often heard this referred to as a universal reference.<br>
  I've also heard it been called a forwarding reference.<br>
  Do they mean the same thing?<br>
  Is it only a forwarding reference if the function body calls <code>std::forward</code>?</p>