Есть ли способ проверить, вызывается ли обобщенная c лямбда с определенным типом c?!
#include <iostream>
#include <type_traits>
struct A { void DoAStuff() {} };
struct B { void DoBStuff() {} };
int main() {
auto fn = [](auto& arg) { arg.DoAStuff(); };
std::cout << std::boolalpha << std::is_invocable<decltype(fn), A&>::value << std::endl;
std::cout << std::boolalpha << std::is_invocable<decltype(fn), B&>::value << std::endl;
}
этот код не компилируется, и я понимаю, почему. но мне интересно, есть ли способ заставить что-то подобное работать? как мы можем определить класс, чем при передаче лямбда, вернуть false вместо ошибки компиляции
ошибка: нет члена с именем 'DoAStuff' в 'B'