title: Wrapper for std::queue emplace
body: <p>I'm working with Visual Studio 2012 on Windows 8 and trying to create a wrapper for std::queue which adds thread safety and a few other features.  I'm having trouble creating a wrapper function for emplace.  I suspect it's due to the way variadic templates are emulated, but I"m not sure how to fix it.</p>
  
  <pre><code>template &lt;typename T&gt;
  class MyQueue
  {
  public:
     template &lt;class... Args&gt;             // line 20
     void emplace(Args&amp;&amp;... args)
     {
        mQueue.emplace(std::forward&lt;Args&gt;(args)...);
     }
  private:
     std::queue&lt;T&gt; mQueue;
  };
  </code></pre>
  
  <p>This code gives me a bunch of syntax errors.  </p>
  
  <p>@ line 20:</p>
  
  <ul>
  <li>C2011: '' : 'enum' type redefinition </li>
  <li>C2143: syntax error : missing ',' before '...' </li>
  <li>C2332: 'class' : missing tag name</li>
  </ul>
  
  <p>@ line 21:</p>
  
  <ul>
  <li>C2059: syntax error : '...'</li>
  <li>C2065: 'Args' : undeclared identifier</li>
  </ul>
  
  <p>Is there any clean way to tap into the underlying queue's <code>emplace</code> function?  I'm not doing anything performance critical so if it ends up being more trouble than it's worth I'll just force callers to use <code>push</code>.</p>
  
  <p>Any solutions must be with VC++11 - switching platforms or compilers is not an option for me.</p>