Рассматривая лямбды C ++ 11 со следующим кодом,
template <typename M>
void call(void (*f)(M), M m)
{
f(m);
}
int main()
{
call<int>([](int n) { }, 42); // OK
int r;
call<int>([&](int n) { r = n; }, 42); // KO
}
существует ли разница в сигнатуре между лямбдами, которая делает второй несовместимым с аргументом call
?
I используйте g ++ 4.6.1.
Дополнительный вопрос: почему параметр не может быть выведен, если я напишу call ([] (int n) {}, 42);
?