我遇到了这段代码的问题:
#include <iostream>
using namespace std;
class A {
public:
template<typename T, typename... Args>
void stuff(Args... args);
};
template<typename T, typename... Args>
void A::stuff(Args... args) {
cout << sizeof...(args) << endl;
}
template<>
void A::stuff<int>() {
cout << "int" << endl;
}
int main() {
A a;
A b;
a.stuff<char>();
b.stuff<int>();
}
Trying to compile it,我收到此错误:
template-id 'stuff<int>' for 'void A::stuff()' does not match any template declaration
我做错了什么?我尝试了它没有variadicness它工作,但我如何专门化可变参数模板成员函数?
答案 0 :(得分:5)
这看起来像个错误。问题不仅限于完全专用的成员函数模板。即使使用免费功能模板也可以复制,如下所示:
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() {}
虽然clang 3.2编译得很好,但gcc抱怨:
spec.cpp:31:6:错误:'void stuff2()'的模板ID'stuff2'没有 匹配任何模板声明
有一个相关的SO question。
message似乎证实这确实是一个错误。