检查类型T是否可以用任何东西调用

时间:2018-03-30 13:24:44

标签: c++ lambda c++17 template-meta-programming

我试图做一个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。

0 个答案:

没有答案