template std::future::type> spawn_task(F&& f,A&& a) { typedef std::result_of::type result_type; std::packaged_task task(std::move(f)); std::future res(task.get_future()); std::thread t(std::move(task),std::move(a)); t.detach(); return res; }