显式实例化variadic构造函数:template-id与任何模板声明都不匹配

时间:2016-12-29 00:04:37

标签: c++ variadic-templates variadic-functions explicit-instantiation

我正在尝试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*);

1 个答案:

答案 0 :(得分:3)

让我们暂时忽略参数包:

template<typename Arg> stf(Arg &&args)

弹出测验:哪个实例与上述模板匹配。是吗:

template<char *> stf(char *);

template<char *> stf(char *&&);

如果您在模板中显示模板类型的任何地方替换char *,您显然会以第二个版本作为正确答案。

因此,正确的模板实例化必须是:

template stf::stf<char*,char*>(char* &&,char* &&);