Вы никогда не должны писать vector :: value_type вместо int, поскольку вы уже знаете, что они идентичны. Лучший пример поможет; Я также хотел бы более простые параметры лямбда.
Однако тип выводимого параметра зависит от того, как используется лямбда, и это можно узнать, только зная подробности for_each. Но разрешение перегрузки функции зависит от знания типов параметров, поэтому тип параметра не может зависеть от того, как функция его использует, иначе у вас будет циклическая зависимость.
В текущем C ++ вы избегаете этой циклической зависимости, отделяя тип функтора от его типов параметров:
struct AddExample {
template<class T>
T operator()(T a, T b) {
return a + b;
}
};
some_algo(begin, end, AddExample());
Эквивалент может быть сделан для лямбда-синтаксиса, за счет использования некоторой семантики (например, неявного преобразования в указатели на функции и std :: function), но я не вижу, чтобы это происходило для C ++ 0x. *