Why not always use std::forward?
<p>The distinction between <code>std::move</code> and <code>std::forward</code> is well known, we use the latter to preserve the value category of a forwarded object and the former to cast to rvalue reference in order to enable move semantics. </p>

<p>In <strong>effective modern C++</strong>, a guideline exists that states </p>

<blockquote>
  <p>use <code>std::move</code> on rvalue references, <code>std::forward</code> on universal references.</p>
</blockquote>

<p>Yet in the following scenario (<em>and scenarios where we don't want to change value category</em>),</p>

<pre><code>template &lt;class T&gt;
void f(vector&lt;T&gt;&amp;&amp; a)
{
    some_func(std::move(a)); 
}
</code></pre>

<p>where <code>a</code> is not a forwarding reference but a simple rvalue reference, wouldn't it be exactly the same to do the following?</p>

<pre><code>template &lt;class T&gt;
void f(vector&lt;T&gt;&amp;&amp; a)
{
    some_func(std::forward&lt;decltype(a)&gt;(a)); 
}
</code></pre>

<p>Since this can be easily encapsulated in a macro like this,</p>

<pre><code>#define FWD(arg) std::forward&lt;decltype(arg)&gt;(arg)
</code></pre>

<p>isn't it convenient to always use this macro definition like so?</p>

<pre><code>void f(vector&lt;T&gt;&amp;&amp; a)
{
    some_func(FWD(a)); 
}
</code></pre>

<p>Aren't the two ways of writing this exactly equivalent?</p>