我正在尝试explicitly instantiate a variadic构造函数。这个print all arguments的最小例子导致了我在64位Win 7上用GCC 5.3在MinGW-w64上看到的相同错误。
struct stf {
template<typename... Args> stf(Args&&... args){
using expand_type = int[];
expand_type{(print(args), 0)... };
}
};
//error on next line:
//template-id 'stf<char*, char*>' for 'stf::stf(char*, char*)'
//does not match any template declaration
template stf::stf<char*,char*>(char*,char*);
答案 0 :(得分:3)
让我们暂时忽略参数包:
template<typename Arg> stf(Arg &&args)
弹出测验:哪个实例与上述模板匹配。是吗:
template<char *> stf(char *);
或
template<char *> stf(char *&&);
如果您在模板中显示模板类型的任何地方替换char *
,您显然会以第二个版本作为正确答案。
因此,正确的模板实例化必须是:
template stf::stf<char*,char*>(char* &&,char* &&);