title: Partial specialization is not more specialized
body: <p>To my surprise, I got an error, when I tried to compile this code with <code>GCC 7.2.0</code>.</p>
  
  <p>Code:</p>
  
  <pre><code>#include &lt;typeinfo&gt;
  #include &lt;iostream&gt;
  #include &lt;utility&gt;
  
  template &lt;typename Seq, typename Seq::value_type Inc&gt; struct increment;
  template &lt;typename T, T... I, T Inc&gt;                                   
  struct increment&lt;std::integer_sequence&lt;T,I...&gt;, Inc&gt; {                 
    using type = std::integer_sequence&lt;T,(I+Inc)...&gt;;                    
  };                                                                     
  
  int main(int argc, char* argv[]) {
    typename increment&lt;std::make_index_sequence&lt;2&gt;,1&gt;::type seq;
    std::cout &lt;&lt; typeid(seq).name() &lt;&lt; std::endl;
  }
  </code></pre>
  
  <p>Error:</p>
  
  <pre><code>error: partial specialization 'struct increment&lt;std::integer_sequence&lt;T, I ...&gt;, Inc&gt;' is not more specialized than [-fpermissive]
   struct increment&lt;std::integer_sequence&lt;T,I...&gt;, Inc&gt; {
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  spec.cc:5:62: note: primary template 'template&lt;class Seq, typename Seq::value_type Inc&gt; struct increment'
   template &lt;typename Seq, typename Seq::value_type Inc&gt; struct increment;
                                                                ^~~~~~~~~
  </code></pre>
  
  <p>I've been using <code>increment</code> for quite a while now with <code>GCC 6.2.0</code> without a problem.</p>
  
  <p>Which one is correct? If <code>GCC 7</code> is correct, how do I write this metafunction?</p>