std::is_function 是如何实现的

use*_*729 4 c++ c++11

根据 CPP 参考,std::is_function可以按如下方式实现。有人可以解释为什么它有效,因为它似乎不直接寻址可调用对象?

template<class T>
struct is_function : std::integral_constant<
    bool,
    !std::is_const<const T>::value && !std::is_reference<T>::value
> {};
Run Code Online (Sandbox Code Playgroud)

Cub*_*bbi 6

它利用了https://eel.is/c++draft/basic.type.qualifier#1中的这句话

函数或引用类型始终是无 cv 限定的。

因此,给定一个 type T,它会尝试创建一个const T. 如果结果不是const限定类型,则 T 必须是函数或引用类型。然后它消除了引用类型,就完成了。

(不要与const最后的成员函数混淆:也就是说,用标准语言来说,“带有 cv-qualifier-seq 的函数类型”,与“cv 限定的函数类型”不同)