Как проверить, вызывается ли лямбда GENERI C с определенным типом аргумента ввода? - PullRequest
1 голос
/ 06 августа 2020

Есть ли способ проверить, вызывается ли обобщенная 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'

...