在VS2013中为可变参数模板部分推导模板参数

时间:2014-09-21 16:49:49

标签: c++ templates variadic-templates

以下错误导致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;
}

因此,在向模板添加额外类型时,它无法推断出参数,这可能是编译器错误,还是语言不支持?

由于

0 个答案:

没有答案