如何理解is_可调用的定义? < ISO> C++标准规范草案N4606,在〈20.156〉中, ISO可调用< /代码>定义为: 模板 结构是可调用的

如何理解is_可调用的定义? < ISO> C++标准规范草案N4606,在〈20.156〉中, ISO可调用< /代码>定义为: 模板 结构是可调用的,c++,c++17,C++,C++17,表达式INVOKE(declval(),declval()…,R)作为未赋值的操作数处理时格式良好 据我所知,Fn(ArgTypes…是返回Fn并将其作为参数的函数签名,ArgTypes… 因此,INVOKE(declval(),…)将尝试调用函数的返回值 那么可调用的目标是什么?或者我哪里出错了?据我所知,std::is_callable将回答以下问题:如果可以使用ArgTypes…的实例作为参数调用Fn的实例,并且该调用是否会导致R类型的对象 举个例子: #include <type_

表达式
INVOKE(declval(),declval()…,R)
作为未赋值的操作数处理时格式良好

据我所知,
Fn(ArgTypes…
是返回
Fn
并将其作为参数的函数签名,
ArgTypes…

因此,
INVOKE(declval(),…)
将尝试调用函数的返回值


那么
可调用的目标是什么?或者我哪里出错了?

据我所知,
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, "!!");
}
#包括
结构A{
int运算符()(int,float,double){返回0;}
};
int main(){

静态断言(STD:ISSeCalabele/P>什么是<代码>调用< /C>?顺便问一下,我在C++引用中提到过,但是找不到定义。我认为 STD:后面的一个想法:ISSCALL Eng/<代码>第一个参数类似于parameter@VioletGiraffe:@LightnessRacesinOrbit:我看到了。什么
调用
,大写?@LightnessRacesinOrbit:我是一个程序员,不是读者,不要对我太苛刻:)谢谢。
#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, "!!");
}