Lig*_*ica 33 c++ lambda language-lawyer c++17
我迷失了吗?这总是允许的吗?
#include <iostream>
int main()
{
auto& os = std::cout;
auto write = []()
{
os << "what\n";
};
write();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用:
Apple LLVM 10.0.0版(clang-1000.10.44.4)
目标:x86_64-apple-darwin17.7.0
虽然也看到Coliru:
我一直认为空捕获不会捕获任何东西.
的确,MSDN 说:
空捕获子句[]表示lambda表达式的主体不会访问封闭范围中的变量.
进一步的研究表明,这实际上可以捕捉const东西(我也不知道,但无论如何),但os不是const(没有参考!虽然它是不可改变的......).
当我打开-Wextra并注意到Clang认为&os捕获(存在于我的真实代码中)是不必要的时候,我偶然发现了这一点.删除它我错开了发现构建工作.