auto task = std::make_shared< std::packaged_task<return_type()> >(
std::bind(std::forward<F>(f), std::forward<Args>(args)...)
);
auto task = std::shared_ptr< std::packaged_task<return_type()> >(
new std::packaged_task<return_type()>(std::bind(std::forward<F>(f), std::forward<Args>(args)...))
);