【发布时间】:2015-04-30 17:38:10
【问题描述】:
考虑这个代码示例:
#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 (tags/RELEASE_350/final) (based on LLVM 3.5.0))输出为例:
0
2125673120
32546
第一行总是 0,最后两行是 "random"。
是clang中的错误还是其他什么?我认为这个代码示例是正确的。
更新:
当 lambda 函数返回类型是其他类型(例如 std::vector 或 std::array)时,此代码可以正常工作。
【问题讨论】:
-
接受重复推荐:此处的代码在功能上与链接问题底部的示例相同(基于范围的 for 循环绑定为
auto && __begin =)