Разрешение неоднозначной перегрузки указателя функции и std::function для лямбда-выражения с использованием + (унарный пC++

Программы на C++. Форум разработчиков
Anonymous
Разрешение неоднозначной перегрузки указателя функции и std::function для лямбда-выражения с использованием + (унарный п

Сообщение Anonymous »

В следующем коде первый вызов foo неоднозначен и поэтому не может скомпилироваться.

Второй, с добавленным + перед лямбдой, разрешается как перегрузка указателя функции.

Код: Выделить всё

#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

Вернуться в «C++»