span" wordingSection: 23.7.2.2.2 [span.cons] Status: C++20 Submitter: Stephan T. Lavavej Opened: 2018-04-12 Last modified: 2021-02-25
Priority: 0
View all other issues in [span.cons].
View all issues with C++20 status.
Discussion:
The span constructors have wording relics that mention an "empty span". It's unnecessary (the
behavior is fully specified by the postconditions), but I left it there because I thought it was harmless. It was
later pointed out to me that this is actually confusing. Talking about an "empty span" implies that there's just
one such thing, but span permits empty() to be true while data() can vary
(being null or non-null). (This behavior is very useful; consider how equal_range() behaves.)
span" wording should simply be removed, leaving the constructor behavior unchanged.
Editorially, there's also a missing paragraph number.
[ 2018-04-24 Moved to Tentatively Ready after 6 positive votes on c++std-lib. ]
[2018-06 Rapperswil: Adopted]
Proposed resolution:
This wording is relative to N4741.
Edit 23.7.2.2.2 [span.cons] as indicated:
constexpr span() noexcept;-2- Postconditions:
-1- Effects: Constructs an emptyspan.size() == 0 && data() == nullptr. -3- Remarks: This constructor shall not participate in overload resolution unlessExtent <= 0istrue.constexpr span(pointer ptr, index_type count);-4- Requires:
-5- Effects: Constructs a[ptr, ptr + count)shall be a valid range. Ifextentis not equal todynamic_extent, thencountshall be equal toextent.spanthat is a view over the range[ptr, ptr + count).If-6- Postconditions:countis0then an empty span is constructed.size() == count && data() == ptr. -?- Throws: Nothing.constexpr span(pointer first, pointer last);-7- Requires:
-8- Effects: Constructs a[first, last)shall be a valid range. Ifextentis not equal todynamic_extent, thenlast - firstshall be equal toextent.spanthat is a view over the range[first, last).If-9- Postconditions:last - first == 0then an emptyspanis constructed.size() == last - first && data() == first. -10- Throws: Nothing.