title: Partial specialization of variadic template member function
body: <p>I'm struggling with specializations of member functions when they are templated using variadic template.</p>
  
  <p>The following example specializes a whole class and it works fine:</p>
  
  <pre><code>template&lt;typename... Args&gt;
  class C;
  
  template&lt;class T, typename... Args&gt;
  class C&lt;T, Args...&gt; { };
  
  template&lt;&gt;
  class C&lt;&gt; { };
  
  int main() {
      C&lt;int, double&gt; c{};
  }
  </code></pre>
  
  <p>The following one does not, even though the idea behind it is exactly the same of the one above:</p>
  
  <pre><code>class F {
      template&lt;typename... Args&gt;
      void f();
  };
  
  template&lt;class T, typename... Args&gt;
  void F::f&lt;T, Args...&gt;() { }
  
  int main() {
  }
  </code></pre>
  
  <p>I'm getting the following error and I don't understand what it's due to:</p>
  
  <pre><code>main.cpp:7:23: error: non-type partial specialization ‘f&lt;T, Args ...&gt;’ is not allowed
   void F::f&lt;T, Args...&gt;() { }
                         ^
  main.cpp:7:6: error: prototype for ‘void F::f()’ does not match any in class ‘F’
   void F::f&lt;T, Args...&gt;() { }
        ^
  main.cpp:3:10: error: candidate is: template&lt;class ... Args&gt; void F::f()
       void f();
            ^
  </code></pre>
  
  <p>Is there some constraints I'm not aware of when specializing function template?</p>
  
  <p>G++ version is: <em>g++ (Debian 5.2.1-23) 5.2.1 20151028</em></p>
  
  <p><strong><em>EDIT</em></strong></p>
  
  <p>By the way, the actual problem I'm getting from the real code is:</p>
  
  <pre><code>non-class, non-variable partial specialization ‘executeCommand&lt;T, Args ...&gt;’ is not allowed
  </code></pre>
  
  <p>Anyway, the reduced example is similar to the real one. I hope the errors are not completely unrelated.</p>