42 -> std::future<std::invoke_result_t<std::decay_t<F>, std::decay_t<Args>...>>
44 using R = std::invoke_result_t<std::decay_t<F>, std::decay_t<Args>...>;
45 auto task = std::make_shared<std::packaged_task<R()>>(
46 [fn = std::forward<F>(fn),
47 tup = std::make_tuple(std::forward<Args>(args)...)]()
mutable
49 return std::apply(std::move(fn), std::move(tup));
51 auto fut = task->get_future();
52 enqueue([task]() { (*task)(); });