How remove_reference disable template argument deductions?
<p>According to <a href="https://stackoverflow.com/questions/7779900/why-is-template-argument-deduction-disabled-with-stdforward">this link</a>, template argument deduction is disallowed for <code>std::forward</code>, and <code>std::remove_reference</code> is helping us to achieve that. But how does using <code>remove_reference</code> prevent template deduction from happening here?</p>
<pre><code>template &lt;class S&gt;
S&amp;&amp; forward(typename std::remove_reference&lt;S&gt;::type&amp; t) noexcept
{
    return static_cast&lt;S&amp;&amp;&gt;(t);
}
</code></pre>