2

我正在尝试explicitly instantiate a variadic构造函数。这个最小的例子print all arguments导致我在MinGW-w64 64位Win 7上看到与GCC 5.3相同的错误。显式实例化可变参数构造函数:template-id与任何模板声明不匹配

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*); 

回答

3

让我们忽略的参数包,一个时刻:

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

突击测验:其实例上面的模板匹配。它是:

template<char *> stf(char *); 

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

如果您将char *替换为模板中的任何位置,您显然会以第二个版本作为正确答案。

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

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

谢谢@Sam。我试图从构造函数转发参数,因此我找到了一个完美的转发示例(上面没有链接),然后找到了另外两个示例。当我把所有东西放在一起时,我没有注意到xvalue引用不是参数包的必需特征......并且有一个例子有它们,有一个没有。在我的辩护中,我只是一名机械工程师,我正在回头修复几年前我写的一些旧代码:-P –

相关问题