sto leggendo qui su cppreference su come un tipo di ritorno di un lambda C++ 11 si deduce:C++ 11 restrizioni sul tipo di ritorno lambda
if the body consists of the single
return
statement, the return type is the type of the returned expression (after rvalue-to-lvalue, array-to-pointer, or function-to-pointer implicit conversion)
Quindi penso che significa che una lambda può ha solo una dichiarazione di ritorno. Ma perché funziona ancora con più dichiarazioni di ritorno?
Questo compiles su entrambi i compilatori:
auto f = [] (bool c1, bool c2) {
if (c1) return 1;
if (c2) return 2;
else return 3;
};
La pagina che collega a mostra anche che le regole sono cambiate in C++ 14. La mia prima ipotesi è che i compilatori stiano implementando le regole del C++ 14 anche in modalità C++ 11. – hvd
@hvd Sì, questo è quello che sospettavo ma ero ancora scettico. – 0x499602D2
FWIW, ho controllato cosa dice C++ 11 e corrisponde a quello che hai già trovato online, quindi sì, dovrebbe generare una diagnostica in fase di compilazione. Detto questo, l'implementazione della regola C++ 14 non può causare il rifiuto di un codice C++ 11 valido, quindi potrebbe essere solo un problema minore. – hvd