В следующем коде первый вызов 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)
}
Что такое обозначение +
здесь?