Ответ 1
Вы должны указать тип возврата лямбда для int&
. Если вы оставите тип возврата [и лямбда имеет форму return expression;
, он автоматически выведет возвращаемый тип.
#include <iostream>
class Item
{
public:
int& f(){return data_;}
private:
int data_ = 0;
};
int main()
{
Item item;
auto lambda = [](Item& item) ->int& {return item.f();}; // Specify lambda return type
lambda(item) = 42;
std::cout << item.f() << std::endl;
return 0;
}