title: How to Support Variadic Template Types in Visual Studio 2017
body: <p><a href="https://stackoverflow.com/a/48835768/2642059">T.C. gave a clever solution here</a> which used this object:</p>
  
  <pre><code>template&lt;class... Ts&gt; struct overload : Ts... { using Ts::operator()...; };
  template&lt;class... Ts&gt; overload(Ts...) -&gt; overload&lt;Ts...&gt;;
  struct fallback_t { template&lt;class T&gt; fallback_t(T&amp;&amp;) {} };
  </code></pre>
  
  <p>Unfortunately I can't get that to compile in Visual Studio 2017. I get the errors:</p>
  
  <blockquote>
    <p>1> warning C4346: 'Ts::()': dependent name is not a type <br>
    1> note: prefix with 'typename' to indicate a type <br>
    1> note: see reference to class template instantiation 'owner::overload'  being compiled <br>
    1> error C2143: syntax error: missing ';' before '...' <br>
    1> error C2059: syntax error: '...' <br>
    1> error C2238: unexpected token(s) preceding ';' <br>
    1> error C2988: unrecognizable template declaration/definition <br>
    1> error C2143: syntax error: missing ')' before '...' <br>
    1> error C2143: syntax error: missing ';' before '...' <br>
    1> error C2365: 'Ts': redefinition; previous definition was 'template parameter' <br>
    1> note: see declaration of 'Ts' <br>
    1> error C2238: unexpected token(s) preceding ';' <br>
    1> error C2059: syntax error: '...' <br>
    1> error C2059: syntax error: ')' <br>
    1> error C2955: 'owner::overload': use of class template requires template  argument list <br>
    1> note: see declaration of 'owner::overload' <br>
    1> error C2664: 'void owner::bar:: <br>::operator ()(owner::fallback_t) const': cannot convert argument 1 from 'owner::fallback_t' to 'owner::fallback_t' <br>
    1> note: use of undefined type 'owner::fallback_t' <br>
    1> note: see declaration of 'owner::fallback_t' <br>
    1> error C2672: 'owner::findObject': no matching overloaded function found <br>
    1> error C2780: 'void owner::findObject(int,const T &amp;)': expects 2 arguments - 1  provided <br>
    1> note: see declaration of 'owner::findObject' <br></p>
  </blockquote>
  
  <p>Is there any trickery that I can do to make Visual Studio respect the variadic template in?</p>