检查以下代码。
#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...);
我不明白的是,为什么f
和args
成为构造函数中的引用类型? Args...
是int, int
类型,而args...
刚刚变成int&, int&
。这是哪里来的?