It looks like an error. The problem is not limited to fully specialized member function templates. It can be reproduced even using free function templates as follows:
template<typename T, typename... Args> void stuff2(Args... args); template<typename T, typename... Args> void stuff2(Args... args) { cout << sizeof...(args) << endl; } template<> void stuff2<int>() { cout << "int" << endl; } int main() {}
While clang 3.2 compiles this just fine, gcc complains about:
spec.cpp: 31: 6: error: template-id 'stuff2' for 'void stuff2 ()' does not match any template declaration
There is a related SO question .
A message seems to confirm that this is indeed a mistake.
source share