C++ 模板参数包自动将 & 添加到其参数

C++ template parameter pack automatically adds & to its parameters

检查下面的代码。

#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&。这是从哪里来的?

packaged_task没有您想要的签名。

编译器说没有这样的功能。 (可能下面有候选人)