title: Can the 'type' of a lambda expression be expressed?
body: <p>Thinking of lambda expressions as 'syntactic sugar' for callable objects, can the unnamed underlying type be expressed?  </p>
  
  <p>An example:  </p>
  
  <pre><code>struct gt {
      bool operator() (int l, int r) {
          return l &gt; r;
      }
  } ;
  </code></pre>
  
  <p>Now, <code>[](int l, int r) { return l &gt; r; }</code> is an elegant replacement for the above code (plus the necessary creation of callable objects of gt), but is there a way to express gt (the type) itself?  </p>
  
  <p>A simple usage:  </p>
  
  <pre><code>std::set&lt;int, gt&gt; s1;  // A reversed-order std::set
  // Is there a way to do the same using a lambda?
  std::set&lt;int, some-magic-here-maybe([](int l, int r) { return l &gt; r; }) &gt; s2;
  </code></pre>