Kann der 'Typ' eines Lambda-Ausdrucks ausgedrückt werden?

Denken Sie Lambda-Ausdrücke als 'syntaktischen Zucker' für aufrufbare Objekte. Kann der unbenannte zugrunde liegende Typ ausgedrückt werden?

Ein Beispiel

struct gt {
    bool operator() (int l, int r) {
        return l > r;
    }
} ;

Jetzt,[](int l, int r) { return l > r; } ist ein eleganter Ersatz für den obigen Code (plus der notwendigen Erstellung aufrufbarer Objekte von gt), aber gibt es eine Möglichkeit, gt (den Typ) selbst auszudrücken?

Eine einfache Verwendung:

std::set<int, gt> s1;  // A reversed-order std::set
// Is there a way to do the same using a lambda?
std::set<int, some-magic-here-maybe([](int l, int r) { return l > r; }) > s2;

Antworten auf die Frage(8)

Ihre Antwort auf die Frage