かなり前に、引数の少なくとも 1 つがラムダである場合、Visual C++ 10 で ADL が失敗することに気付きました。
std::vector<float> vec;
for_each(begin(vec), end(vec), [](float) {});
上記は VC++10 および 11 (ベータ) でのコンパイルに失敗します (begin と end は ADL を介して検出されます)。ラムダ関数を通常の自由関数に変換すると、期待どおりに機能します。
Herb Sutters ブログで 1 回質問したことがあり、msdn connect の投稿も読んだことがありますが、通常の回答は次のとおりでした。これはバグです。ラムダの最新の標準をまだ実装していません。物事はまだ焼きたての形になっていません。MS Connect では、これが次のリリース、つまり vc 11 で解決されないという不穏なコメントもありました。
私の質問は、このコードは C++11 標準で動作すると予想されますか? 私はそれを完全に理解することはできません。ラムダを使用している場合、for_each やその他のアルゴリズムの前に std:: を付ける必要がありますか? この動作は vc++11 のリリース後も変わらないのではないかと思います。