title: Can I use std::async without waiting for the future limitation?
body: <p><strong>High level</strong><br>
  I want to call some functions with no return value in a async mode without waiting for them to finish. If I use std::async the future object doesn't destruct until the task is over, this make the call not sync in my case.</p>
  
  <p><strong>Example</strong>  </p>
  
  <pre><code>void sendMail(const std::string&amp; address, const std::string&amp; message)
  {
      //sending the e-mail which takes some time...
  }
  
  myResonseType processRequest(args...)
  {
      //Do some processing and valuate the address and the message...
  
      //Sending the e-mail async
      auto f = std::async(std::launch::async, sendMail, address, message);
  
      //returning the response ASAP to the client
      return myResponseType;
  
  } //&lt;-- I'm stuck here until the async call finish to allow f to be destructed.
    // gaining no benefit from the async call.
  </code></pre>
  
  <p><strong>My questions are</strong> </p>
  
  <ol>
  <li>Is there a way to overcome this limitation?</li>
  <li>if (1) is no, should I implement once a thread that will take those "zombie" futures and wait on them?</li>
  <li>Is (1) and (2) are no, is there any other option then just build my own thread pool?</li>
  </ol>
  
  <p><strong>note:</strong><br>
  I rather not using the option of thread+detach (suggested by @galop1n) since creating a new thread have an overhead I wish to avoid. While using std::async (at least on MSVC) is using an inner thread pool.  </p>
  
  <p><strong>Thanks.</strong></p>