O 'tipo' de uma expressão lambda pode ser expresso?

Pensando em expressões lambda como 'açúcar sintático' para objetos que podem ser chamados, o tipo subjacente sem nome pode ser expresso?

Um exemplo:

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

Agora,[](int l, int r) { return l > r; } existe um substituto elegante para o código acima (mais a criação necessária de objetos que podem ser chamados de gt), mas existe uma maneira de expressar o próprio gt (o tipo)?

Um uso simples:

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;

questionAnswers(4)

yourAnswerToTheQuestion