promise and future

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();
}
```