2

检查下面的代码。

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

4

1 回答 1

1

packaged_task没有您想要的签名。

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

于 2019-05-19T12:50:00.100 回答