Является ли текущая стандартная спецификация конструктора std :: span по умолчанию правильной для «Extent <= 0"?

#c #language-lawyer #c -standard-library #c 20

#c #язык-юрист #c -standard-library #c 20

Вопрос:

По состоянию на 21 апреля 2019 года, 02:44:49 UTC, версия [span.cons] на https://eel.is/c draft / кажется, содержит ошибку:

 constexpr span() noexcept;
  

Ограничения: Extent <= 0 есть true .
Гарантирует: size() == 0 amp;amp; data() == nullptr .

Extent была скорректирована, чтобы иметь size_t тип, и dynamic_extent теперь numeric_limits<size_t>::max() . Следовательно, Extent <= 0 по существу эквивалентно Extent == 0 . То есть конструктор отключается, когда экстент является динамическим, что, вероятно, не предназначено.

Я предполагаю, что цель заключается Extent == 0 || Extent == dynamic_extent в том, чтобы это работало, когда dynamic_extent было подписано.

Это ошибка в стандарте? Я что-то пропустил?

Ответ №1:

Это LWG3198. Это обсуждалось на этой неделе и должно быть официально исправлено в августе.