参考实现:
template <typename F, typename... Args>
class is_invocable {
template <typename U>
static auto test(int) -> decltype(std::declval<U>()(std::declval<Args>()...), std::true_type());
template <typename U>
static std::false_type test(...);
public:
static constexpr bool value = std::is_same<decltype(test<F>(0)), std::true_type>::value;
};