title: Is it better to use the default launch policy for std::async with newer compilers?
body: <p>It is well known that the default launch policy may lead to deferred execution when using <code>std::async</code>. See for example <a href="https://stackoverflow.com/questions/46102206/how-does-a-c-compiler-choose-between-deferred-and-async-execution-for-stdasy">How does a C++ compiler choose between deferred and async execution for std::async?</a>.</p>
  
  <p>I had seen this behaviour here when using MinGW-W64 with gcc 5.2.0. Therefore I have got used to always passing <code>std::launch::async</code> as launch policy.</p>
  
  <p>Yet lately I have realized that newer gcc versions behave different. When using MinGW-W64 and g++ 8.1.0, omitting the <code>std::async</code> launch policy also leads to asynchronous execution in the code of the example linked above. Therefore I do not see a clear advantage of the <code>std::async</code> launch policy anymore.</p>
  
  <p>On the contrary, item 35 of Scott Meyer's "Effective Modern C++" seems to imply that the default lauch policy might prevent out-of-threads exceptions or lead to better load-balancing, if the C++ Standard Library implements a reasonable thread scheduler.</p>
  
  <p>Is this the case? Should I therefore get used to sticking to the default launch policy? Is this the a general advice for all (relatively new) C++ compilers?</p>