相当长一段时间以前,我注意到在Visual C++ 10中,当至少有一个参数是lambda表达式时,ADL会失败。
std::vector<float> vec;
for_each(begin(vec), end(vec), [](float) {});
上述代码在VC++10和11(beta)上无法编译(通过ADL找到begin和end)。当我将lambda函数转换为常规自由函数时,一切都按预期工作。
我曾在Herb Sutters博客上提问过,并阅读了一些关于msdn connect的帖子和通常的答案是:这是一个错误,我们尚未实现最新标准的lambda,这在当时是可以理解的。事情还没有成型。在MS connect上也有令人不安的评论,即这将不会在下一个版本即vc 11中解决。
我的问题是,这段代码是否符合C++11标准?我无法完全理解。当我使用lambda时,我是否真的需要在for_each和其他算法前加上std::前缀?
我有点怀疑在vc++11发布后,这种行为不会改变。