Is there an implementation of std::async which uses thread pool?
<p>The standard function <a href="http://en.cppreference.com/w/cpp/thread/async" rel="nofollow noreferrer">std::async</a>:</p>

<blockquote>
  <p>The template function async runs the function f asynchronously (potentially in a separate thread which may be part of a thread pool) and returns a std::future that will eventually hold the result of that function call.</p>
</blockquote>

<p>There is two launch polices <a href="http://en.cppreference.com/w/cpp/thread/launch" rel="nofollow noreferrer">std::launch::async and std::launch::deferred</a>. In my compiler's (<strong>GCC 6.2</strong>) standard library impelmentation, the first one always creates a new thread and the second one does lazy evaluation on the calling thread. By default <code>std::launch::deferred</code> is used.</p>

<p>Is there some implementation which uses thread pool with size equal to the hardware threads available when <code>std::launch::async</code> is specified to avoid creating two many threads when <code>std::async</code> is used in recursive algorithm?</p>