Promises and Futures are used to ferry a single object from one thread to another.
A std::promise object is set by the thread which generates the result.
A std::future object can be used to retrieve a value, to test to see if a value is available, or to halt execution until the value is available.
```
#include <iostream>
#include <future>
using namespace std;
int main() {
auto p=promise<string>();
auto f=p.get_future();
auto producer=thread([&]{p.set_value("Hello World");});
auto consumer=thread([&]{cout<<f.get();});
producer.join();
consumer.join();
}
```