我天真地期待这个编译:
template <typename Func>
auto run(Func && func) {
auto package = std::packaged_task{std::forward<Func>(func)}; // deduce the template args automatically (C++17)
auto future = package.get_future();
enqueue(std::packaged_task<void()>{std::move(package)}); // only works if packaged_task is <R()>, but ok
return future;
}
说明:这可能来自线程池实现,enqueue()
只是将参数排队以在工作线程上执行。
然而,问题是没有 的推导指南packaged_task
,因此 C++17 构造函数模板参数推导当然会失败。
那么,为什么没有扣除指南呢?