Рассмотрим этот образец кода:
#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;
}
Я попытался скомпилировать его с g++ (gcc версия 4.9.2 (Debian 4.9.2-10)) и выход правильный. В clang++ (Debian clang version 3.5.0-9 (теги/RELEASE_350/final) (на основе LLVM 3.5.0)), например:
0
2125673120
32546
Где первая строка всегда 0, а последние две являются "случайными".
Это ошибка в clang или что-то еще? Я думаю, что этот образец кода верен.
Update:
Когда возвращаемый тип лямбда-функции является чем-то другим (например, std::vector или std:: array), этот код работает нормально.