title: Default argument for partial specialization [Clang yes, GCC no]
body: <p>Why does the following compile with <code>clang</code> but not with <code>g++ 4.9</code></p>
  
  <pre><code>#include &lt;array&gt;
  
  template&lt; typename T1, typename T2 , typename T3 = int&gt;
  struct A;
  
  template&lt;typename T, unsigned int N, typename T2, typename T3&gt;
  struct A&lt; std::array&lt;T,N&gt;, T2,  T3 &gt; {
      int a;
  };
  
  int main()
  {
    A&lt; std::array&lt;int,10&gt;, double&gt;  a;
    a.a +=3;
  }
  </code></pre>
  
  <p><a href="http://coliru.stacked-crooked.com/a/c7800f49ba5aac43" rel="nofollow noreferrer">http://coliru.stacked-crooked.com/a/c7800f49ba5aac43</a></p>
  
  <p>g++ does not find a suitable specialization and complains with "incomplete type". I am wondering since, the default argument <code>typename T3 = int</code> should apply for the specialization (or does it only apply for full specialization?)</p>