std::future — represents a value from async operation. std::promise — sets the value.
1#include <future>23// Promise/Future pair4std::promise<int> prom;5std::future<int> fut = prom.get_future();67std::thread t([&prom] {8 prom.set_value(42); // Set result9});1011std::cout << fut.get(); // 4212t.join();1314// std::packaged_task15std::packaged_task<int(int)> task([](int x) {16 return x * 2;17});18std::future<int> result = task.get_future();19task(21); // Execute20std::cout << result.get(); // 422122// Error propagation23std::promise<void> p;24std::future<void> f = p.get_future();25p.set_exception(26 std::make_exception_ptr(std::runtime_error("oops"))27);28f.get(); // Throws!
Key points: