很久以前,我注意到在 Visual C++ 10 中,当至少一个参数是 lambda 时,ADL 会失败。
std::vector<float> vec;
for_each(begin(vec), end(vec), [](float) {});
以上无法在 VC++10 和 11 (beta) 上编译(通过 ADL 找到开始和结束)。当我将 lambda 函数转换为常规的自由函数时,事情会按预期工作。
我曾经在 Herb Sutters 博客上问过一次,还阅读了 msdn connect 上的一些帖子,通常的答案是:这是一个错误,我们还没有实现 lambdas 的最新标准,这在当时是可以理解的。事情还没有成熟。在 MS connect 上,也有令人不安的评论,即下一个版本(即 vc 11)将无法解决此问题。
我的问题是,这段代码是否可以在 C++11 标准下工作?我不能完全弄清楚。当我使用 lambdas 时,我真的必须在我的 for_each 和其他算法前面加上 std:: 吗?我怀疑这种行为在 vc++11 发布后不会改变。