title: Passing arguments to std::async by reference fails
body: <p>I've noticed that it's impossible to pass a non-const reference as an argument to <code>std::async</code>.</p>
  
  <pre><code>#include &lt;functional&gt;
  #include &lt;future&gt;
  
  void foo(int&amp; value) {}
  
  int main() {
      int value = 23;
      std::async(foo, value);
  }
  </code></pre>
  
  <p>My compiler (GCC 4.8.1) gives the following error for this example:</p>
  
  <pre><code>error: no type named ‘type’ in ‘class std::result_of&lt;void (*(int))(int&amp;)&gt;’
  </code></pre>
  
  <p>But if I wrap the value passed to <code>std::async</code> in <code>std::reference_wrapper</code>, everything is OK. I assume this is because <code>std::async</code> takes it's arguments by value, but I still don't understand the reason for the error.</p>