title: Partial specialization of double-templated method fails
body: <p>There is the template class List.</p>
  
  <pre><code>template &lt;typename Point&gt;
  class List
  {
  
  
      public:
            template &lt;const unsigned short N&gt;
            void load ( const char *file);
            ...
  };
  
  template &lt;typename Point&gt;
  template &lt;const unsigned short N&gt;
  void List &lt;Point&gt;::load ( const char *file)
  }
  </code></pre>
  
  <p>How to specialize method load for N=2? This code is not valid...</p>
  
  <pre><code>template &lt;typename Point&gt;
  void List &lt;Point&gt; &lt;2&gt;::load ( const char *file)
  {
  }
  </code></pre>
  
  <p>And this code also does not work.</p>
  
  <pre><code>template &lt;typename Point&gt;
  void List &lt;Point&gt; ::load &lt;2&gt; ( const char *file )
  { 
  }
  
  Error 3 error C2768: 'List&lt;Point&gt;::load' : illegal use of explicit template arguments 66. 
  Error 5 error C2244: 'List&lt;Point&gt;::load' : unable to match function definition to an existing declaration 66
  </code></pre>
  
  <p>Compiler g++:</p>
  
  <pre><code>template &lt;typename Point&gt;
  template &lt;&gt;
  void List &lt;Point&gt; ::load &lt;2&gt; ( const char *file )
  {
  }
  
  error: explicit specialization in non-namespace scope `class List&lt;&gt;'
  error: enclosing class templates are not explicitly specialized
  error: default arguments are only permitted for function parameters
  error: `load' is not a function template
  error: invalid function declaration
  </code></pre>