title: How remove_reference disable template argument deductions?
body: <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>