title: deduce template argument for typedef'd function pointer
body: <p>Is there a way to deduce a template argument for a function pointer when using a typedef?  My sample code is:</p>
  
  <pre><code>struct A {};
  void func(const A&amp;) {};
  
  template &lt;typename T&gt;
  struct FuncPtr
  {
      typedef void(*Type)(const T&amp;);
  };
  
  void f_(FuncPtr&lt;A&gt;::Type) {}
  
  template &lt;typename T&gt; // I'd like to hide the messy function pointer in a typedef
  void f1(typename FuncPtr&lt;T&gt;::Type fp) { f_(fp); }
  
  template &lt;typename T&gt; // this works, but "fp" is really several lines long
  void f2(void(*fp)(const T&amp;)) { f_(fp); }
  </code></pre>
  
  <p>With that in place, I can call <code>f2(AFunc)</code>.  But I'd rather have something closer to <code>f1(func)</code> because in my actual code the declaration for the function pointer is much longer.  And I need to have an actual function pointer, rather than just passing a template argument, so that I can call <code>f_()</code>.</p>