High level
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.
Example
void sendMail(const std::string& address, const std::string& 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;
} //<-- I'm stuck here until the async call finish to allow f to be destructed.
  // gaining no benefit from the async call.
My questions are
- Is there a way to overcome this limitation?
- if (1) is no, should I implement once a thread that will take those "zombie" futures and wait on them?
- Is (1) and (2) are no, is there any other option then just build my own thread pool?
note:
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.  
Thanks.
 
     
     
     
     
    