[已接受]标准文件N4280增加了几个新的非成员函数,以便折叠成C ++ 17。
有备注表明每个新的非成员函数的正确返回值,特别是固定大小数组的std::empty
重载让我感到困惑。本文建议该重载的返回值始终为false
; 所有固定大小的数组永远不会为空。
为什么会出现这种情况?据我所知,有可能(尽管可能没用)拥有零大小的数组,如int x[0];
,我称之为空。
作为参考,我所说的特定超载是:
template <class T, size_t N> constexpr bool empty(const T (&array)[N]) noexcept;
答案 0 :(得分:4)
它总是返回false,因为数组不能声明为包含零元素。从C ++ 11标准(我没有更新的标准,我不希望这会改变):
在声明
T D
中D
的格式为
D1 [
常量表达式 opt]
attribute-specifier-seq opt...如果常量表达式存在,它应该是一个整数常量表达式,其值应大于零。 - §8.3.4[dcl.array]
因此,在符合要求的实现中,此重载始终会返回true。