Rozważmy tę próbkę kodu:Wracając std :: initializer_list w brzękiem
#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;
}
Próbowałem skompilować go z g ++ (gcc w wersji 4.9.2 (Debian 4.9.2-10)) i wyjście poprawny. W brzękiem ++ (Debian dzyń wersja 3.5.0-9 (tags/RELEASE_350/final) (oparty na LLVM 3.5.0)) wyjście na przykład:
0
2125673120
32546
Jeżeli pierwsza linia jest zawsze 0, a dwa ostatnie są "losowy".
To błąd w klangu lub coś innego? Myślę, że ta próbka kodu jest poprawna.
Aktualizacja:
Gdy typ lambda powrót funkcja jest coś innego (np std :: vector lub std :: array) ten kod działa poprawnie.
akceptując powielone zalecenie: kod jest funkcjonalnie identyczny jak w przykładzie na dole połączonego pytania (pętla oparta na zasięgu dla 'auto && __begin =') –