title: Unable to understand this Template parameter
body: <p>Maybe it's flu, or I'm just plain stupid, but I can't understand a part of <a href="https://github.com/ipkn/crow/blob/master/include/http_connection.h" rel="nofollow">this</a> Crow framework code. My inner C++ parser fails. </p>
  
  <pre><code>template &lt;typename MW&gt;
  struct check_before_handle_arity_3_const
  {
   template &lt;typename T,
       //this line
       void (T::*)(int, typename MW::context&amp;) const = &amp;T::before_handle 
    &gt;
      struct get
      { };
  };
  </code></pre>
  
  <p>I know it's a template parameter inside template declaration. It looks like maybe some lambda  or function pointer type parameter... but, I'm not sure. 
  Can someone explain this line? </p>
  
  <p><strong>Update:</strong>
  Exploring depths of newly obtained knowledge - after the answer was given - led me to this excerpt from a great <a href="https://en.wikipedia.org/wiki/Modern_C%2B%2B_Design" rel="nofollow">book</a>:</p>
  
  <blockquote>
    <p>A template can accept a pointer to a function as a nontype template
    parameter. (Most often in this book, nontype template parameters are
    integral values.) [...] Using a pointer to a function as a nontype
    template argument means that we no longer need to store it in the map.
    This essential aspect needs thorough understanding. The reason we
    don't need to store the pointer to a function is that the compiler has
    static knowledge about it. Thus, the compiler can hardcode the
    function address in the trampoline code.</p>
  </blockquote>
  
  <p>So, now I know one of the reasons to use this technique. </p>