気を失いましたか?これは常に許可されましたか?
#include <iostream>
int main()
{
auto& os = std::cout;
auto write = []()
{
os << "what\n";
};
write();
}
私が使用しています:
Apple LLVMバージョン10.0.0(clang-1000.10.44.4)
ターゲット:x86_64-Apple-darwin17.7.0
Coliruも参照:
空のキャプチャは何もキャプチャしないといつも思っていました。
確かに、MSDN says :
空のキャプチャ句[]は、ラムダ式の本体が外側のスコープの変数にアクセスしないことを示します。
さらなる調査によると、これは実際にconst
のもの(私も知りませんでしたが、何でも)をキャプチャするのに問題はありませんが、os
はconst
ではありません(参照はありません) !それでもis不変...).
オンにすると私はこれに遭遇しました-Wextra
とClangが&os
キャプチャ(実際のコードに含まれています)は不要です。それを削除すると、ビルドが機能することがわかりました。