title: What are the main purposes of using std::forward and which problems it solves?
body: <p>In perfect forwarding, <code>std::forward</code> is used to convert the named rvalue references <code>t1</code> and <code>t2</code> to unnamed rvalue references. What is the purpose of doing that? How would that affect the called function <code>inner</code> if we leave <code>t1</code> &amp; <code>t2</code> as lvalues?</p>
  
  <pre><code>template &lt;typename T1, typename T2&gt;
  void outer(T1&amp;&amp; t1, T2&amp;&amp; t2) 
  {
      inner(std::forward&lt;T1&gt;(t1), std::forward&lt;T2&gt;(t2));
  }
  </code></pre>