title: Error in MSVC variadic template handling?
body: <p>I'm attempting to maintain some code with variadic template functions that seems to work perfectly in GCC but fails in MSVC. I'm not very comfortable with this type of functions, but I have been able to reduce the problem to the following</p>
  <pre><code>#include &lt;vector&gt;
  
  template&lt;
          template&lt;typename...&gt; class Container1&gt;
  std::vector&lt;int&gt; process(Container1&lt;int&gt; c)
  {}
  
  int main() {
      std::vector&lt;int&gt; vectorOfInts;
      process(vectorOfInts);
  }
  </code></pre>
  <p>The real code is more complicated and the function takes more arguments, but the error is the same. The <code>process</code> function is supposed to take several collections of some type and output a vector containing some of the elements.</p>
  <p>The code compiles in GCC 7.2.0 but fails in MSVC 19.27.29112 with the following error:</p>
  <pre><code>test.cpp(10): error C2672: 'process': no matching overloaded function found
  test.cpp(10): error C2784: 'std::vector&lt;int,std::allocator&lt;int&gt;&gt; process(Container1&lt;int&gt;)': could not deduce template argument for 'Container1&lt;int&gt;' from 'std::vector&lt;int,std::allocator&lt;int&gt;&gt;'
  test.cpp(5): note: see declaration of 'process'
  </code></pre>
  <p>After extensive searching, the only thing I've been able to come up with are some bug reports for MSVC that are reportedly fixed. Does anyone have a suggestion for what could be the issue here, and how to work around it?</p>
  <p>Thanks!</p>