检查下面的代码。
#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&
。这是从哪里来的?