#include <iostream>
#include <future>
#include <chrono>

int delayedAdd(int a, int b)
{
    std::this_thread::sleep_for(std::chrono::seconds(3));
    std::cout << "In add\n";
    return a + b;
}

int main()
{
    std::packaged_task<int()> pTask(std::bind(delayedAdd, 2, 3));
    auto fut = pTask.get_future();

    std::thread t(std::move(pTask));
    t.detach();

    std::cout << fut.get();
}
/* Output
In add
5
*/