Лямбда может быть преобразована в указатель на функцию, только если она не захватывает.
Тип закрытия для лямбда-выражения без лямбда-захвата имеет открытую не виртуальную неявную функцию преобразования констант в указатель на функцию, имеющую тот же параметр и возвращаемые типы, что и оператор вызова функции типа закрытия. Значение, возвращаемое этой функцией преобразования, должно быть адресом функции, которая при вызове имеет тот же эффект, что и вызов оператора вызова функции типа замыкания
[Lambda Functions][1]
Я изменил ваш код, как показано ниже, и он работал.
int (*foo)(int, int)= [] (int a, int b) { return a + b; };
int main()
{
cout << "Res:: " << foo(10,20);
return 0;
}
Я просто делаю это указателем на функцию.
С другой стороны,
auto foo = [](int a, int b) { return a + b; };
также хороший выбор.
Надеюсь, это поможет!