title: Type of pointer to member function without const/volatile/ref-qualifier
body: <p>Say I want to specialize a template on PMF types, I can do:</p>
  
  <pre><code>template&lt;typename F&gt;
  struct Foo {};
  
  template&lt;typename R, typename T&gt;
  struct Foo&lt;R T::*&gt; {};
  </code></pre>
  
  <p>The <code>R T::*</code> part is also what <code>std::mem_fn</code> uses to avoid overloading on all combinations of qualifiers. (See <a href="http://en.cppreference.com/w/cpp/utility/functional/mem_fn" rel="nofollow">here</a>.) However, a drawback to this approach is we lose the type information about the parameters of this member function.</p>
  
  <p>If instead we write:</p>
  
  <pre><code>template&lt;typename R, typename T, typename... Args&gt;
  struct Foo&lt;R (T::*)(Args...)&gt; {};
  </code></pre>
  
  <p>We can know the exact parameter types (<code>Args...</code>), but this specialization cannot be matched against a <code>const</code> member function (or <code>volatile</code>/ref-qualified ones).</p>
  
  <p>Is there a way to retain the parameter types while not needing to make specializations for all the qualified versions of the PMF?</p>