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。本周讨论过,应该会在八月份正式修复。