title: Why is the destructor of a future returned from `std::async` blocking?
body: <p>When trying to answer another <a href="https://stackoverflow.com/questions/23454793/whats-the-c-11-way-to-fire-off-an-asynchronous-task-and-forget-about-it">Stackoverflow question</a>, I realized that this simple C++11 snippet is implicitly blocking the calling thread:</p>
  
  <pre><code>std::async(std::launch::async, run_async_task)
  </code></pre>
  
  <p>To me this would have seemed the canonical C++11 way to launch a task asynchronously without caring about the result. Instead one has to apparently explicitly create and detach a thread (see <a href="https://stackoverflow.com/a/23454840/369310">answer</a> to mentioned question) in order to achieve this.</p>
  
  <p>So here's my question: Is there any reason in regards to safety/correctness that the destructor of a <code>std::future</code> has to be blocking? Wouldn't it be enough if it blocks on <code>get</code> only and otherwise, if I'm not interested in the return value or exception, it's simply fire and forget?</p>