This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++20 status.
decay in viewable_range should be remove_cvrefSection: 25.4.6 [range.refinements] Status: C++20 Submitter: Casey Carter Opened: 2020-01-14 Last modified: 2021-02-25
Priority: 0
View all other issues in [range.refinements].
View all issues with C++20 status.
Discussion:
The viewable_range concept is defined in 25.4.6 [range.refinements] as:
template<class T>
concept viewable_range =
range<T> && (safe_range<T> || view<decay_t<T>>);
Since neither pointer types, array types, nor function types model view,
view<decay_t<T>> here could simplified to view<remove_cvref_t<T>>.
The use of decay_t is an artifact of the Ranges TS being based on C++14 which didn't have
remove_cvref_t. [Note that the proposed change is not purely editorial since the difference
is observable to subsumption.]
[2020-02-01 Status set to Tentatively Ready after five positive votes on the reflector.]
Previous resolution [SUPERSEDED]:
This wording is relative to N4842.
Modify 25.4.6 [range.refinements] as indicated:
-4- The
viewable_rangeconcept specifies the requirements of arangetype that can be converted to aviewsafely.template<class T> concept viewable_range = range<T> && (safe_range<T> || view<decay_tremove_cvref<T>>);
[2020-02-06 Casey provides a corrected P/R]
... in response to Jonathan's observation that remove_cvref<T> is both the wrong type and not what the
discussion argues for.
[2020-02 Status to Immediate on Thursday morning in Prague.]
Proposed resolution:
This wording is relative to N4849.
Modify 25.4.6 [range.refinements] as indicated:
-4- The
viewable_rangeconcept specifies the requirements of arangetype that can be converted to aviewsafely.template<class T> concept viewable_range = range<T> && (safe_range<T> || view<decay_tremove_cvref_t<T>>);