title: Why is a parameter pack allowed after default arguments?
body: <p>Maybe I'm missing something obvious, but the following compiles and runs, and I'm not sure why. I am aware of <a href="https://stackoverflow.com/questions/27303283/clang-vs-gcc-variadic-template-parameter-pack-followed-by-parameter-with-defau">this</a>, but in the example below the position of the parameter pack and the default argument are reversed. Doesn't it violate the rule that default arguments have to appear last? The parameter pack cannot have a default value.</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;tuple&gt;
  
  template&lt;typename ... Ts&gt;
  struct Test
  {
      int i;
      std::string str;
  
      Test(int _i = 0, Ts&amp;&amp; ... _ts)
          :
            i(_i),
            str(std::get&lt;0&gt;(std::forward_as_tuple(std::forward&lt;Ts&gt;(_ts)...)))
      {}
  };
  
  int main()
  {
      Test&lt;std::string&gt; t(1, "huh??");
      std::cout &lt;&lt; "t.i = " &lt;&lt; t.i &lt;&lt; ", t.str = " &lt;&lt; t.str &lt;&lt; "\n";
  
      return 0;
  }
  </code></pre>
  
  <p>This produces</p>
  
  <pre><code>t.i = 1, t.str = huh??
  </code></pre>