Сначала вы должны знать, что тип [](int*) -> bool {...}
это , а не просто bool(int*)
или bool(*)(int*)
;это уникальный тип замыкания, преобразуемый в bool(*)(int*)
.
. И этот тип не выводим в этом контексте.
Решение: явно выполните преобразование.
X.Disable( static_cast<bool(*)(int*)>([](int*) -> bool {...}) );
Лучшее решение: как @ Какой-то программист чувак говорит, используйте шаблон или используйте std::function
.Например:
template <typename F>
void Disable(F f)
{
static_assert(std::is_invocable_r_v<bool, F, int*>, "your message here"); // if you want to ensure that the function is actually valid
// ...
}
Или:
void Disable(std::function<bool(int*)> f) { ... }