title: Perfect forwarding of primitive types
body: <p>I need to implement some methods similar to <code>vector::emplace</code> for my own data structures. In the general case, I would implement them so that they support perfect forwarding, i.e., with rvalue-references, <code>std::forward</code> and that stuff.</p>
  
  <p>However, what if I know that all parameters to forward are primitive types such as <code>int</code> or <code>float</code>. Does it make any sense to implement perfect forwarding for primitive types?</p>
  
  <p>In other words, is there a difference between the following two code snippets, assuming that we only use primitive types as template parameters?</p>
  
  <pre><code>template &lt;typename... Args&gt;
  void wrapper(Args&amp;&amp; ... args) {
     func(std::forward&lt;Args&gt;(args)...);
  }
  </code></pre>
  
  <p>and</p>
  
  <pre><code>template &lt;typename... Args&gt;
  void wrapper(Args ... args) {
     func(args...);
  }
  </code></pre>
  
  <p>Additionally: Is there any difference if we know that the template parameters can only be classes which contain only primitive types? Or classes that contains only primitive types and other classes which themselves contain only primitive types?</p>