Releases any shared state. This means
- if the return object or provider holds the last reference to its shared state, the shared state is destroyed; and
- the return object or provider gives up its reference to its shared state; and
- these actions will not block for the shared state to become ready, except that it may block if all of the following are true:
- the shared state was created by a call to std::async,
- the shared state is not yet ready,
- the task’s launch policy is std::launch::async (see "Effective Modern C++" Item 36), either because that was chosen by the runtime system or because it was specified in the call to std::async, and
- this was the last reference to the shared state.