如何理解is_callable定义?

时间:2016-12-04 14:14:42

标签: c++ c++17

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

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

表达式INVOKE(declval<Fn>(),declval<ArgTypes>()...,R)在被视为未评估的操作数时形式良好。

据我所知Fn(ArgTypes...)是一个函数的签名,它返回一个Fn并作为参数ArgTypes...

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

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

1 个答案:

答案 0 :(得分:3)

根据我的理解std::is_callable将回答问题,如果Fn的实例可以使用ArgTypes...的实例作为参数调用,并且此调用将导致{{1}的对象输入。

举个例子:

R

[live demo]