Il C++ standard, sezione § 5.1.2/6: [expr.prim.lambda]
Il tipo di chiusura per un non-generico lambda-espressione senza alcuna lambda-capture è disponibile una funzione di conversione const non esplicita pubblica non virtuale per puntare alla funzione con collegamento linguaggio C++ (7.5) con gli stessi parametri e tipi di ritorno dell'operatore di chiamata di funzione del tipo di chiusura. Il valore restituito da questa funzione di conversione deve essere l'indirizzo di una funzione che, quando viene richiamato, ha lo stesso effetto di invocare il suo tipo di chiusura dell'operatore funzione di chiamata
Dal momento che il lambda ha una cattura (uno di default: [&]
) , non esiste un operatore di conversione per un puntatore alla funzione.
In alternativa, è possibile utilizzare std::function<>
per avvolgere la lambda:
#include <functional>
#include <iostream>
int main()
{
int i = 42;
std::function<void(void)> f = [&](){ std::cout << i; };
f();
}
auto f = [&]() {...}? – Kiroxas
Lambda con catture non può essere convertito in puntatori di funzione. – user657267
Nota che non stai cercando di passare una funzione lambda come riferimento. – juanchopanza