std::future::~future
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   ~future(); 
 | 
(since C++11) | |
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, and this was the last reference to the shared state.