У вас есть лямбда без сохранения состояния.
Лямбда без сохранения состояния может быть преобразована в указатель на функцию. Таким образом, ваши лямбды конвертируются в void (*)(int)
, и этот указатель присваивается bool
, что дает всегда true
.
Чтобы вызывать лямбду "на лету", вам нужно добавить ()
с параметром:
val = LambdaTest(x, y, [](int x) -> bool {
return x > 15;
}(x) ); // <---
cout << "Lambda test 1: " << val << endl;
val = LambdaTest(x, y, [](int y) -> bool {
return y > 15;
}(y) ); // <---
[](){} -> bool ( /*here passed arguments */ );
Другое решение - сохранить функтор, сгенерированный лямбда-выражением, в некоторой переменной, а затем применить ()
к этому объекту:
auto l1 = [](int x) -> bool {
return x > 15;
};
val = LambdaTest(x, y, l1(x));
cout << "Lambda test 1: " << val << endl;