Различия в сигнатуре функций в C ++ 11

Рассматривая лямбды 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); ?

6
задан James McNellis 29 September 2012 в 03:21
поделиться