C++ 11: No. Ogni espressione lambda ha, cito (§5.1.2/3):
[...] un unico, classe non-union senza nome di tipo [ ...]
Ciò significa in effetti che non è possibile conoscere il tipo di lambda senza conoscere prima l'espressione corrispondente.
Ora, se non è stato catturato nulla, è possibile utilizzare la conversione in funzione del puntatore e restituirlo (un tipo di puntatore a funzione), ma è piuttosto limitante.
Come @Luc rilevato nel salotto, se siete disposti a sostituire la make_counter
(e se non è un modello, o di sovraccarico, o qualcosa del genere), il seguente avrebbe funzionato:
auto const make_counter = [](int i = 0) {
return [i]() mutable { return i++; };
};
C++ 1y: Sì, tramite deduzione di tipo ritorno per le normali funzioni (N3582).
L'espressione lambda non è valida anche in C++ 11. La deduzione del tipo restituito non funzionerebbe se il corpo contiene più della semplice 'espressione di ritorno; '(§5.1.2,4) –
Tecnicamente è possibile restituire' my_not_STD_function' che semplicemente reimplementa qualcosa di sostanzialmente equivalente ... – Yakk
@Arne: Blame OP per modifica ...: P risolto. – Xeo