首页 > 解决方案 > std::is_function 是如何实现的?

问题描述

以下是如何实现的std::is_function

template<class T>
struct is_function : std::integral_constant<
    bool,
    !std::is_const<const T>::value && !std::is_reference<T>::value
> {};

(来自CPP 参考

在我看来, anint将是此定义下的函数。我错过了什么?

标签: c++templatesstdsfinae

解决方案


让我们回顾一下出现的条件:
If const Tis not const (const并不真正适用于函数类型,因为函数不是对象),并且T不是引用 (const也不适用于引用,原因相同) ,它是一个函数类型。int(或任何其他非函数非引用类型)不适合,因为is_const<const int>::valueis true.

根据C++17 标准§11.3.5 函数/第 7 节:(强调我的)

函数声明器中 cv-qualifier-seq 的效果与在函数类型之上添加 cv-qualification 不同。在后一种情况下,将忽略 cv 限定符。[ 注意:具有 cv-qualifier-seq 的函数类型不是 cv-qualified 类型;没有 cv 限定的函数类型。— 尾注] [...]


推荐阅读