title: C++ template function unused typename
body: <p>I'm trying to get my head around C++ templates and copy semantics.
  I understand why I can't call <code>assign1</code> (It asks for rvalue references and I'm providing an lvalue ref)
  But then why am I able to call <code>assign2</code> which imposes the same constraints?</p>
  
  <pre class="lang-cpp prettyprint-override"><code>template&lt;typename... Args&gt;
  void assign1(Args&amp;&amp; ... arguments) { }
  
  template&lt;typename A, typename... Args&gt;
  void assign2(Args&amp;&amp; ... arguments) { }
  
  template&lt;typename A, typename B, typename... Args&gt;
  void assign3(Args&amp;&amp; ... arguments) { }
  
  int main() {
      const int r = 2;
      assign1&lt;int&gt;(r);        // no matching function for call to...
      assign2&lt;int&gt;(r);        // ok!
      assign3&lt;int&gt;(r);        // no matching function for call to...
  }
  
  </code></pre>