std::is_function 是如何实现的

how is std::is_function implemented

根据 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
> {};

它利用了https://eel.is/c++draft/basic.type.qualifier#1

中的这句话

A function or reference type is always cv-unqualified.

因此,给定类型 T,它会尝试生成 const T。如果结果是 not a const-qualified 类型,则 T 必须是函数或引用类型。然后它消除引用类型,并完成。

(不要与最后有 const 的成员函数混淆:也就是说,在标准语中,“a function type with a cv-qualifier-seq”与“cv-qualified 函数不同类型")