Общие лямбды и унарный оператор + - PullRequest
0 голосов
/ 08 ноября 2019

Насколько я понимаю, оператор + перед лямбда-выражением разрешает перегрузку указателя на функцию. ( Пост )

Однако я не понимаю, вполне понимаю, почему он не работает с общими лямбдами. Например:

auto foo = +[](int a) { std::cout << "foo " << a << std::endl; };  // Valid

auto bar = +[](auto a) { std::cout << "bar " << a << std::endl; }; // Fails 

// compiler error: 
// no match for ‘operator+’ (operand type is ‘main()::<lambda(auto:1)>’)

Какова интуиция за этим?

Живой пример

1 Ответ

0 голосов
/ 08 ноября 2019

Итак, проблема в (авто а). Как это будет выглядеть, если у тебя нет лямд? :

void FuncSecond(auto a) { std::cout << "bar " << a << std::endl; } <-- So, how parameter can be "auto"? 

«auto» должно быть разрешено во время компиляции. Что будет, если вы отправите его другим методам и вызовете его с разными аргументами? Это слишком большая неопределенность. Если вы хотите создать метод, который может принимать другие параметры, чем вы можете использовать шаблоны. (Или, может быть, вы можете использовать int? =))

...