В следующем коде первый вызов foo неоднозначен и поэтому не компилируется.
Второй, с добавленным + до лямбда, разрешает перегрузку указателя функции.
#include <functional>
void foo(std::function<void()> f) { f(); }
void foo(void (*f)()) { f(); }
int main ()
{
foo( [](){} ); // ambiguous
foo( +[](){} ); // not ambiguous (calls the function pointer overload)
}
Что такое обозначение + здесь?