У вас не может быть лямбда в качестве члена, потому что лямбда - это «странные» объекты, и вы можете объявить их только с помощью auto
(нет возможности записать тип лямбда-выражения), однако auto
non stati c члены не допускаются.
Для этого нет реальной причины, кроме того, что они так решили (формально причин много, но каждая из них также применима к другим вариантам использования auto
, которые вместо этого разрешены, так что IMO они не объяснение).
Может быть, что-то изменится в будущем, когда кто-то еще будет в комитете.
Вы можете обойти проблему, используя std::function
обертка для члена.
struct Foo {
std::function<double(double)> square = [](double x) { return x*x; };
};