Разрешение неоднозначной перегрузки указателя функции и 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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