Considerate questo esempio di codice:Tornando std :: initializer_list in clang
#include <initializer_list>
#include <iostream>
int main()
{
for(auto e: []()->std::initializer_list<int>{return{1,2,3};}())
std::cout<<e<<std::endl;
return 0;
}
ho provato a compilare con g ++ (gcc versione 4.9.2 (Debian 4.9.2-10)) e l'uscita è corretta. In clang ++ (Debian clang versione 3.5.0-9 (tag/RELEASE_350/def) (sulla base di LLVM 3.5.0)) Uscita per esempio:
0
2125673120
32546
Dove prima linea sono sempre 0 e l'ultimo due sono "random".
È errore in clang o qualcos'altro? Penso che questo esempio di codice sia corretto.
Aggiornamento:
Quando il tipo di funzione lambda di ritorno è un'altra cosa (per esempio std :: vector o std :: array) questo codice funziona bene.
accettando la raccomandazione duplicata: il codice qui è funzionalmente identico all'esempio nella parte inferiore della domanda collegata (basata su intervallo per i collegamenti loop come 'auto && __begin =') –