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.
Section: 26.4.5 [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 26.4.5 [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 26.4.5 [range.refinements] as indicated:
-4- The viewable_range concept specifies the requirements of a range type that can be converted to a view safely.
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 26.4.5 [range.refinements] as indicated:
-4- The viewable_range concept specifies the requirements of a range type that can be converted to a view safely.
template<class T> concept viewable_range = range<T> && (safe_range<T> || view<decay_tremove_cvref_t<T>>);