我试图做一个constexpr来检查类型F是否是可调用对象。由于可调用对象可以是通用lambda,因此在不知道可能采用什么参数的情况下确定F是否可调用似乎非常困难。对于非模板化类型F我使用以下特征:
template<class F, class... Args>
struct is_callable
{
template<class U> static auto test(U* p) -> decltype((*p)(std::declval<Args>()...), void(), std::true_type());
template<class U> static auto test(...) -> decltype(std::false_type());
static constexpr bool value = decltype(test<F>(0))::value;
};
有没有办法检查类型F是否具有任何呼叫操作员签名而无需提供Args。