Credo 5.1.5/3 è quello che impedisce di utilizzare un lambda il modo in cui lo si dovrebbe utilizzare, mi dispiace:
[...] A lambda-espressione non deve comparire in un operando non valutata (Clausola [espr]), in un argomento modello, in una dichiarazione alias, in una dichiarazione typedef, o nella dichiarazione di un modello di funzione o funzione al di fuori del suo corpo della funzione e degli argomenti predefiniti. [Nota: l'intenzione è di impedire che lambda appaia in una firma. - nota end] [...]
Detto questo, C++ 14 vi fa definire un tipo di utente utilizzando i modelli, come nel seguente esempio:
template<typename F>
struct S;
template<typename R, typename... Args>
struct S<R(Args...)> {
using member = R(Args...);
R operator()(Args...) { return R{}; }
member M;
};
template<typename R, typename... Args>
R S<R(Args...)>::M(Args...) { return R{}; }
int main() { S<void(int)> s; }
Qual è il vantaggio del tipo alias? Hai già scoperto che diminuisce la tua capacità di definire il membro all'interno della classe. – chris
@chris forse vuole usarlo come tipo per 'std :: function'? –
Sto solo esplorando gli angoli bui dello standard C++ per trovare nuovi modi di scrivere codice più generico – Gaetano