以下错误导致VS2013中的模板参数失败,错误C2440:'initializing':无法从'overloaded-function'转换为'f'。但编译精细的GCC。
template <class TRAIT, class ...T>
void myVarFunc(T...arg)
{
printf("test");
}
typedef void(*f)(int a, char b);
int main(int argc, char* argv[])
{
f myf = &myVarFunc<int>;
myf(1, 'x');
return 0;
}
任何人都可以确定失败的原因,可以使用以下方法实例化相同的功能:
myVarFunc<int>(1, 'x'); //compiles ok
以下也编译:
template <class ...Args>
void myVarFunc(Args...arg)
{
printf("test");
}
typedef void(*f)(int a, char b);
int main(int argc, char* argv[])
{
f myf = myVarFunc; //compiles ok
myf(1, 'x');
return 0;
}
因此,在向模板添加额外类型时,它无法推断出参数,这可能是编译器错误,还是语言不支持?
由于