title: Are there any use cases for std::forward with a prvalue?
body: <p>The most common usage of <code>std::forward</code> is to, well, perfect forward a forwarding (universal) reference, like</p>
  
  <pre><code>template&lt;typename T&gt;
  void f(T&amp;&amp; param)
  {
      g(std::forward&lt;T&gt;(param)); // perfect forward to g
  }
  </code></pre>
  
  <p>Here <code>param</code> is an <code>lvalue</code>, and <code>std::forward</code> ends up casting it to a rvalue or lvalue, depending on what the argument that bounded to it was.</p>
  
  <p>Looking at the <a href="http://en.cppreference.com/w/cpp/utility/forward" rel="nofollow noreferrer">definition of <code>std::forward</code> from cppreference.com</a> I see that there is also a <code>rvalue</code> overload</p>
  
  <pre><code>template&lt; class T &gt;
  T&amp;&amp; forward( typename std::remove_reference&lt;T&gt;::type&amp;&amp; t );
  </code></pre>
  
  <p>Can anyone give me any reason why the <code>rvalue</code> overload? I cannot see any use case. If you want to pass a rvalue to a function, you can just pass it as is, no need to apply <code>std::forward</code> on it.</p>
  
  <p>This is different from <code>std::move</code>, where I see why one wants also a <code>rvalue</code> overload: you may deal with generic code in which you don't know what you're being passed and you want unconditional support for move semantics, see e.g. <a href="https://stackoverflow.com/q/28936258/3093378">Why does std::move take a universal reference?</a>.</p>
  
  <p><strong>EDIT</strong> To clarify the question, I'm asking why <a href="http://en.cppreference.com/w/cpp/utility/forward" rel="nofollow noreferrer">overload (2) from here</a> is necessary, and a use case for it.</p>