title: how to use std forward correctly in this case
body: <p>Here is a class which has queue as private member and addTask() method and when i compile this i have error with std::forward:</p>
  <pre><code>#include &lt;iostream&gt;
  #include &lt;unistd.h&gt;
  
  #include &lt;functional&gt;
  #include &lt;vector&gt;
  #include &lt;thread&gt;
  #include &lt;condition_variable&gt;
  #include &lt;queue&gt;
  #include &lt;future&gt;
  #include &lt;memory&gt;
  #include &lt;utility&gt;
  
  class Pool {
      public:
          using Task = std::function&lt;void()&gt;;
  
          Pool(){}
          ~Pool(){}
  
          template&lt;typename Func, typename ...Args&gt;
          auto addTask(Func task, Args &amp;&amp;... arguments) -&gt; std::future&lt;decltype(task(arguments...))&gt;
          {
              auto wrapper = std::make_shared&lt;std::packaged_task&lt;decltype(task(arguments...)) (Args...)&gt;&gt;(std::move(task));
              {
                  std::unique_lock&lt;std::mutex&gt; lock(mEventMutex);
                  mTasks.emplace([=] {
                      (*wrapper)(std::forward&lt;Args...&gt;(arguments...));
                  });
              }
              return wrapper-&gt;get_future();         
          }
  
      private:
          std::queue&lt;Task&gt; mTasks;
          std::mutex mEventMutex;
  };
  </code></pre>
  <p>and using it like this:</p>
  <pre><code>int task_with_argument(int value)
  {
   return value;
  }
  
  addTask( task_with_argument, 10 );
  </code></pre>
  <p>and i am getting error:</p>
  <pre><code>error: no matching function for call to ‘forward(const int&amp;)’
  </code></pre>
  <p>I've also tried this:</p>
  <pre><code>(*wrapper)(std::forward&lt;Agrs&gt;(arguments)...);
  </code></pre>
  <p>and again error:</p>
  <pre><code>error: binding reference of type ‘std::remove_reference&lt;int&gt;::type&amp;’ {aka ‘int&amp;’} to ‘const int’ discards qualifiers
  </code></pre>
  <p>Where is a problem?</p>