title: "invalid use of incomplete type" error with partial template specialization
body: <p>The following code:</p>
  
  <pre><code>template &lt;typename S, typename T&gt;
  struct foo {
     void bar();
  };
  
  template &lt;typename T&gt;
  void foo &lt;int, T&gt;::bar() {
  }
  </code></pre>
  
  <p>gives me the error</p>
  
  <pre><code>invalid use of incomplete type 'struct foo&lt;int, T&gt;'
  declaration of 'struct foo&lt;int, T&gt;'
  </code></pre>
  
  <p>(I'm using gcc.) Is my syntax for partial specialization wrong? Note that if I remove the second argument:</p>
  
  <pre><code>template &lt;typename S&gt;
  struct foo {
     void bar();
  };
  
  template &lt;&gt;
  void foo &lt;int&gt;::bar() {
  }
  </code></pre>
  
  <p>then it compiles correctly.</p>