以下是如何实现的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参考)
在我看来,int
在这个定义下,an 将是一个函数。我想念什么?
让我们仔细研究一下出现的条件:
如果const T
不是const(const
因为函数不是对象,所以不适用于函数类型),T
也不是引用(const
出于相同的原因也不适用于引用) ,这是一种函数类型。int
(或任何其他非功能非引用类型)不适合,因为is_const<const int>::value
是true
。
根据C ++ 17标准§11.3.5函数/第7节:(强调我的)
函数声明器中cv-qualifier-seq的作用与在函数类型之上添加cv-qualification的作用不同。在后一种情况下,将忽略cv限定词。[注意:具有cv-qualifier-seq的函数类型不是cv限定的类型;没有cv合格的函数类型。—尾注] [...]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句