57 auto run(F&& f, Args&&... args) -> std::future<
typename std::result_of<F(Args...)>
::type>
59 typedef typename std::result_of<F(Args...)>
::type return_type;
61 auto future_work = std::bind(std::forward<F>(f), std::forward<Args>(args)...);
62 auto task = std::make_shared<std::packaged_task<return_type ()>>(future_work);
63 auto future_result = task->get_future();
64 queue_thunk([task]() { (*task)(); });