title: What does T::* mean in template's parameters?
body: <p>Following the article written in <a href="https://jguegant.github.io/blogs/tech/sfinae-introduction.html" rel="nofollow">here</a>: </p>
  
  <p>I came across this code (shortened and changed for clarity):</p>
  
  <pre class="lang-cpp prettyprint-override"><code>template &lt;class T&gt; struct hasSerialize
  {
      // This helper struct permits us to check that serialize is truly a method.
      // The second argument must be of the type of the first.
      // For instance reallyHas&lt;int, 10&gt; would be substituted by reallyHas&lt;int, int 10&gt; and works!
      // reallyHas&lt;int, &amp;C::serialize&gt; would be substituted by reallyHas&lt;int, int &amp;C::serialize&gt; and fail!
      // Note: It only works with integral constants and pointers (so function pointers work).
      // In our case we check that &amp;C::serialize has the same signature as the first argument!
      // reallyHas&lt;std::string (C::*)(), &amp;C::serialize&gt; should be substituted by 
      // reallyHas&lt;std::string (C::*)(), std::string (C::*)() &amp;C::serialize&gt; and work!
      template &lt;typename U, U u&gt; struct reallyHas;
  
      // We accept a pointer to our helper struct, in order to avoid to instantiate a real instance of this type.
      // std::string (C::*)() is function pointer declaration.
      template &lt;typename C&gt;
      static char&amp;
      test(reallyHas&lt;std::string (C::*)(), &amp;C::serialize&gt;* /*unused*/) { }
  };
  </code></pre>
  
  <p>So this </p>
  
  <pre><code>std::string (C::*)()
  </code></pre>
  
  <p>caught my attention.</p>
  
  <p>Can anyone explain me the <code>C::*</code> part? That is a function pointer that returns <code>std::string</code> but what more?</p>