其他分享
首页 > 其他分享> > c – 模板推导因参数包后的参数而失败

c – 模板推导因参数包后的参数而失败

作者:互联网

我有这个功能:

template <typename... Args>
void f(Args... args, int last)
{
}

如果我在没有显式模板参数的情况下调用它,模板推导将失

f(2, 2); // candidate expects 1 argument, 2 provided

但是为参数包提供显式模板参数有效:

f<int>(2, 2); // compiles fine

尽管从逻辑上讲,编译器应该能够推断出参数包除了最后一个参数类型之外的所有参数类型.我该如何解决这个问题?

解决方法:

[temp.deduct.type] / P5:

The non-deduced contexts are:

  • […]
  • A function parameter pack that does not occur at the end of the parameter-declaration-list.

要获得演绎,你必须这样做

template <typename... Args>
void f(Args... args)
{
}

并切掉正文中的最后一个参数,或者改为最后一个:

template <typename... Args>
void f(int first, Args... args)
{
}

因为我们不知道这个函数模板应该做什么,所以很难给出更具体的建议.

标签:template-deduction,c,c11,templates
来源: https://codeday.me/bug/20190824/1708218.html