很久以前我注意到在Visual C++ 10中,当至少有一个参数是lambda时ADL失败了.
std::vector<float> vec;
for_each(begin(vec), end(vec), [](float) {});
Run Code Online (Sandbox Code Playgroud)
以上无法在VC++ 10和11(beta)上编译(通过ADL找到开始和结束).当我将lambda函数转换为常规自由函数时,事情就像预期的那样工作.
我曾经在Herb Sutters博客上问了一次,并且还阅读了msdn connect上的一些帖子,通常的答案是:这是一个错误,我们还没有实现lambdas的最新标准,但当时 - 这是很容易理解的.事情尚未成熟.在MS连接上也有令人不安的评论,即下一版本即vc 11将无法解决这个问题.
我的问题是,是这样的代码预期的C++ 11个标准下工作?我无法理解这一点.当我使用lambdas时,我是否真的必须使用std ::为我的for_each和其他算法添加前缀?我不知何故怀疑在vc ++ 11发布后这种行为不会改变.