title: Template struct with the default template argument is not instantiated
body: <p>Let's say I have this code</p>
  
  <pre><code>template&lt;typename T2, typename T = int&gt;
  struct X
  {
      static double f;
  };
  
  template&lt;typename T&gt;
  double X&lt;T&gt;::f = 14.0;
  </code></pre>
  
  <p>If I try to compile clang give me the following error </p>
  
  <blockquote>
    <p>nested name specifier 'X::' for declaration does not refer into a
    class, class template or class template partial specialization</p>
  </blockquote>
  
  <p>and for GCC :</p>
  
  <blockquote>
    <p>error: template definition of non-template 'double X::f'</p>
  </blockquote>
  
  <p>The question is :</p>
  
  <p>Why the compiler want us to specialize the struct X like that : </p>
  
  <pre><code>template&lt;typename T2&gt;
  struct X&lt;T2,int&gt;
  {
      static double f;
  };
  </code></pre>
  
  <p>The first declaration has <code>int</code> as a default argument, why the compiler don't choose this declaration ?</p>
  
  <p>I searched in the <a href="http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4527.pdf" rel="nofollow noreferrer">standard</a> anchor [temp.spec] but it didn't help. </p>
  
  <p>I ask this question after answered this <a href="https://stackoverflow.com/q/31623570/5076707">one</a> on SO.</p>
  
  <p>Thanks for your help !</p>