std::span 默认构造函数的当前标准规范在 "Extent <= 0" 上是否正确?
Is the current standard specification on std::span default constructor correct on "Extent <= 0"?
截至2019年4月21日,02:44:49UTC,[span.cons] on https://eel.is/c++draft/的版本似乎包含错误:
constexpr span() noexcept;
Constraints: Extent <= 0
is true
.
Ensures: size() == 0 && data() == nullptr
.
Extent
调整为size_t
类型,
dynamic_extent
现在是 numeric_limits<size_t>::max()
。
因此,Extent <= 0
本质上等同于 Extent == 0
。
也就是说,当范围是动态的时,构造函数被禁用,
这可能不是故意的。
我猜意图是 Extent == 0 || Extent == dynamic_extent
因为这在签署 dynamic_extent
时有效。
这是标准中的错误吗?我错过了什么吗?
这是LWG3198。本周讨论过,应该会在八月份正式修复。
截至2019年4月21日,02:44:49UTC,[span.cons] on https://eel.is/c++draft/的版本似乎包含错误:
constexpr span() noexcept;
Constraints:
Extent <= 0
istrue
.
Ensures:size() == 0 && data() == nullptr
.
Extent
调整为size_t
类型,
dynamic_extent
现在是 numeric_limits<size_t>::max()
。
因此,Extent <= 0
本质上等同于 Extent == 0
。
也就是说,当范围是动态的时,构造函数被禁用,
这可能不是故意的。
我猜意图是 Extent == 0 || Extent == dynamic_extent
因为这在签署 dynamic_extent
时有效。
这是标准中的错误吗?我错过了什么吗?
这是LWG3198。本周讨论过,应该会在八月份正式修复。