title: The implementation of std::forward
body: <p>I'm reading <a href="http://www.artima.com/shop/overview_of_the_new_cpp" rel="noreferrer">Overview of the New C++ (C++11/14) (PDF only)</a>, at Slide 288 it gives an implementation of <code>std::forward</code>:</p>
  <pre><code>template&lt;typename T&gt;                // For lvalues (T is T&amp;),
  T&amp;&amp; std::forward(T&amp;&amp; param)         // take/return lvalue refs.
  {                                   // For rvalues (T is T),
      return static_cast&lt;T&amp;&amp;&gt;(param); // take/return rvalue refs.
  }
  </code></pre>
  <p>And then gives another implemention in text:</p>
  <blockquote>
  <p>The usual <code>std::forward</code> implementation is:</p>
  </blockquote>
  <pre><code>template&lt;typename T&gt;
  struct identity {
      typedef T type;
  };
  template&lt;typename T&gt;
  T&amp;&amp; forward(typename identity&lt;T&gt;::type&amp;&amp; param)
  {
      return static_cast&lt;identity&lt;T&gt;::type&amp;&amp;&gt;(param);
  }
  </code></pre>
  <p>What is the difference? Why is latter the usual implementation?</p>