#include "iostream"
#include"utility"
#include "future"
#include "thread"
using namespace std;
std::future<int> launcher(std::packaged_task<int(int)>& tsk, int arg)
{
if (tsk.valid()) {
std::future<int> ret = tsk.get_future();
std::thread (std::move(tsk),arg).detach();
return ret;
}
else return std::future<int>();
}
int main()
{
std::packaged_task<int(int)> foo;
std::packaged_task<int(int)> bar([](int x){return x*2;});
foo = std::move(bar);
auto ret = foo.get_future();
std::thread(std::move(foo),10).detach();
int value = ret.get();
cout << "value: " <<value <<endl;
std::packaged_task<int(int)> bar1([](int x){return x*2;});
auto fut = launcher(bar1,25);
cout << "fut.get: " << fut.get() << endl;
getchar();
return 0;
}