C ++模板参数包会自动在其参数中添加&

时间:2019-05-19 12:41:10

标签: c++ variadic-templates packaged-task

检查以下代码。

#include <future>

template <class F, class... Args>
void do_something(F f, Args... args) {
    using return_type = typename std::result_of<F(Args...)>::type;

    // Why below gives an error?
    std::packaged_task<return_type(Args...)> task(f, args...);
}

int func(int a, int b) {

}
int main() {
    do_something(func, 1, 2);
}

packaged_task构造函数出现以下错误。

error: no matching function for call to 'std::packaged_task<int(int, int)>::packaged_task(int (*&)(int, int), int&, int&)'

8 |     std::packaged_task<return_type(Args...)> task(f, args...);

我不明白的是,为什么fargs成为构造函数中的引用类型? Args...int, int类型,而args...刚刚变成int&, int&。这是哪里来的?

1 个答案:

答案 0 :(得分:1)

packaged_task没有您想要的签名。

编译器说没有这样的功能。 (可能位于其下方的候选人)