template<typename F>
auto run_in_background(F && f) -> std::future<decltype(f())>
{
std::packaged_task<F> t(f); // doesn't compile, I think I need to decompose F into "Ret(Args...)" somehow.
auto future = t.get_future();
// ...
return future;
}
dGVtcGxhdGU8dHlwZW5hbWUgRj4KYXV0byBydW5faW5fYmFja2dyb3VuZChGICYmIGYpIC0+IHN0ZDo6ZnV0dXJlPGRlY2x0eXBlKGYoKSk+CnsKICAgIHN0ZDo6cGFja2FnZWRfdGFzazxGPiB0KGYpOyAvLyBkb2Vzbid0IGNvbXBpbGUsIEkgdGhpbmsgSSBuZWVkIHRvIGRlY29tcG9zZSBGIGludG8gIlJldChBcmdzLi4uKSIgc29tZWhvdy4KICAgIGF1dG8gZnV0dXJlID0gdC5nZXRfZnV0dXJlKCk7CiAgICAvLyAuLi4KICAgIHJldHVybiBmdXR1cmU7Cn0=