Некоторое время назад я заметил, что в Visual C ++ 10 ADL дает сбой, когда хотя бы один из аргументов является лямбда-выражением.
std::vector<float> vec;
for_each(begin(vec), end(vec), [](float) {});
Выше не удается скомпилировать на VC ++ 10 и 11 (бета) (начало и конец находятся через ADL).Когда я преобразовываю лямбда-функцию в обычную бесплатную функцию, все работает так, как ожидалось.
Я однажды спросил в блоге Херба Саттерса, а также прочитал несколько постов по msdn connect, и обычные ответы были: это ошибка, мы еще не внедрили последний стандарт лямбд, который - в то время -было вполне понятно.Вещи еще не были в запеченном виде.На MS Connect также были неприятные комментарии о том, что это не будет решено для следующего выпуска, т.е. vc 11.
Мой вопрос: этот код ожидается для работы под C ++?11 стандарт?Я не могу понять это.Действительно ли мне нужно использовать префикс моего for_each и других алгоритмов с помощью std ::, когда я использую лямбды?Я почему-то подозреваю, что это поведение не изменится после выпуска vc ++ 11.