title: pre-typedef'ing a variadic-function-pointer argument
body: <p>I have a function <code>foo</code> that takes a variadic function pointer as its argument.</p>
  
  <p>I would like to use "using" to define the argument's type prior to the function declaration.</p>
  
  <pre><code>template &lt;typename ... vARGS&gt;
  using TFuncType = void(*)(vARGS ... V_args);
  
  template &lt;typename ... vARGS&gt;
  void foo(TFuncType&lt;vARGS ...&gt; funcptr) {}
  
  void bar(int i) {}
  
  int main() {
    foo(&amp;bar); // This line fails to compile.
  }
  </code></pre>
  
  <p>This doesn't compile. The error (via clang using c++1z) is:</p>
  
  <pre><code>/make/proj/test/variadic-funcparam-deduce2.cpp:39:5: error: no matching function for call to 'foo'
  foo(&amp;bar);
  ^~~
  /make/proj/test/variadic-funcparam-deduce2.cpp:33:36: note: candidate template ignored: substitution failure [with vARGS = int]
  template &lt;typename ... vARGS&gt; void foo(TFuncType&lt;vARGS ...&gt; funcptr) {}
  </code></pre>
  
  <p>Why is the "int" substitution failing?</p>
  
  <p>I can successfully compile if I explicitly write the type inside foo():</p>
  
  <pre><code>template &lt;typename ... vARGS&gt;
  void foo(void(*funcptr)(vARGS ... V_args)) {}
  </code></pre>
  
  <p>But I cannot get the initial ("using") version to work even when explicitly specifying the template parameters, and using a pre-casted <code>TFuncType&lt;int&gt;</code> for the argument, i.e.:</p>
  
  <pre><code>int main() {
    TF_call&lt;int&gt; fptr = &amp;bar; // This line is OK.
    foo&lt;int&gt;(fptr);
  }
  </code></pre>
  
  <p>Does anyone know what's up here?</p>
  
  <p>Is there something strange about using typedef'd ("using") variadics and/or function pointers that I'm missing?</p>