В C ++ 20 теперь мы можем использовать концепции вместо SFINAE, чтобы выяснить, существует ли функция в шаблоне typename:
template<typename T> concept fooable = requires (T a) {
a.foo();
};
class Foo {
public:
// If commented out, will fail compilation.
void foo() {}
void bar() {}
};
template <typename T> requires fooable<T>
void foo_it(T t) {
t.bar();
}
int main()
{
foo_it(Foo());
}
Как это сделать с функциями, которые имеют непустые аргументы?