title: When to use std::launch::deferred?
body: <p>Lines from Anthony William book:</p>
  
  <blockquote>
    <p><code>std::launch::deferred</code> indicates that the function call is to be
    deferred until either <code>wait()</code> or <code>get()</code> is called on the future.</p>
  
  <pre><code>X baz(X&amp;);
  
  auto f7 = std::async(std::launch::deferred, baz, std::ref(x)); //run in wait() or get()
  //...
  f7.wait();  //invoke deferred function
  </code></pre>
  </blockquote>
  
  <p>What could be the benefits or differences of this code over a direct call (<code>baz(ref(x))</code> )? </p>
  
  <p>In other words, what's the point of having <em>future</em> here?</p>