Ho il seguente codice:Perché ottengo un errore di deduzione tipo per un lambda ritorno lambda con percorsi di ritorno multipli?
int main() {
auto f = [] {
if (1) return [] { return 1; };
else return [] { return 2; };
};
return f()();
}
che solleva il seguente errore del compilatore GCC 5.2.1 utilizzando:
error: inconsistent types ‘main()::<lambda()>::<lambda()>’ and
‘main()::<lambda()>::<lambda()>’ deduced for lambda
return type else return [] { return 2; };
Ora, ovviamente, questi due tipi sembrano essere lo stesso, quindi non sono sicuro se questo è GCC con un messaggio di errore fuorviante o se in realtà è un bug. Secondo la mia conoscenza questo dovrebbe essere compilato; il tipo di ritorno lambda deve essere dedotto di essere std::function<int()>
. È interessante notare che se pre-dichiaro il ritorno lambda e restituisco la stessa variabile due volte, funziona.
chiunque può fare luce su ciò che sta accadendo? Ho trovato domande simili, molte attribuite a bug di GCC, ma questo sembra diverso.
hanno diversi tipi: https://ideone.com/Eo4OXW –
Grazie per l'editing la mia domanda a formattare meglio il codice! Non sono sicuro del motivo per cui ho ricevuto un voto negativo. Sarei felice di mettere più "sforzi di ricerca" se necessario. Ho sentito che si trattava di un errore del compilatore piuttosto curioso, quindi speravo che le persone più competenti qui avrebbero saputo cosa stava succedendo. Per favore, indicami tutte le risorse che dovrei usare se questo non è costruttivo. – Alex
Non ho davvero capito i tipi di lambda, mi dispiace per quello. Il messaggio di errore non aiuta, comunque ... – Alex