Второй, с добавленным + перед лямбдой, разрешается как перегрузка указателя функции.
Код: Выделить всё
#include
void foo(std::function f) { f(); }
void foo(void (*f)()) { f(); }
int main ()
{
foo( [](){} ); // ambiguous
foo( +[](){} ); // not ambiguous (calls the function pointer overload)
}
Подробнее здесь: https://stackoverflow.com/questions/178 ... r-a-lambda
Мобильная версия