如何理解is_callable的定义?

How to understand is_callable definition?

在ISO C++标准规范N4606草案的§20.15.6中,is_callable定义如下:

template <class Fn, class...ArgTypes, class R>
struct is_callable<Fn(ArgTypes...), R>

The expression INVOKE(declval<Fn>(),declval<ArgTypes>()...,R) is well formed when treated as an unevaluated operand.

据我了解 Fn(ArgTypes...) 是一个函数的签名 returning 一个 Fn 并作为参数 ArgTypes....

所以INVOKE(declval<Fn>(),...)会尝试调用函数的return值??

那么is_callable的目标是什么?或者我哪里弄错了?

根据我的理解,std::is_callable 将回答以下问题:是否可以使用 ArgTypes... 的实例作为参数调用 Fn 的实例,以及此调用是否会导致 R类型。

举个例子:

#include <type_traits>

struct A {
    int operator()(int, float, double) { return 0; }
};

int main() {
    static_assert(std::is_callable<A(int, float, double), int>::value, "!");
    static_assert(!std::is_callable<A(int, int), int>::value, "!!");
}

[live demo]