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.2 [ranges.syn] Status: C++20 Submitter: United States/Great Britain Opened: 2019-11-08 Last modified: 2021-02-25
Priority: 1
View other active issues in [ranges.syn].
View all other issues in [ranges.syn].
View all issues with C++20 status.
Discussion:
all_view is not a view like the others. For the other view types, foo_view{args...} is a valid way to construct an instance of type foo_view. However, all_view is just an alias to the type of view::all(arg), which could be one of several different types. all_view feels like the wrong name. Proposed change: Suggest renaming all_view to all_t and moving it into the views:: namespace. Add range_size_t. LEWG asked that range_size_t be removed from P1035, as they were doing a good job of being neutral w.r.t whether or not size-types were signed or unsigned at the time. Now that we've got a policy on what size-types are, and that P1522 and P1523 have been adopted, it makes sense for there to be a range_size_t. Proposed change: Add to [ranges.syn]:template<range R> using range_difference_t = iter_difference_t<iterator_t<R>>; template<sized_range R> using range_size_t = decltype(ranges::size(declval<R&>()));
David Olsen:
The proposed wording has been approved by LEWG and LWG in Belfast.[2019-11-23 Issue Prioritization]
Priority to 1 after reflector discussion.
[2020-02-10 Move to Immediate Monday afternoon in Prague]
Proposed resolution:
This wording is relative to N4835.
Change 26.2 [ranges.syn], header <ranges> synopsis, as indicated:
#include <initializer_list> #include <iterator> namespace std::ranges { […] // 26.4.2 [range.range], ranges template<class T> concept range = see below; […] template<range R> using range_difference_t = iter_difference_t<iterator_t<R>>; template<sized_range R> using range_size_t = decltype(ranges::size(declval<R&>())); template<range R> using range_value_t = iter_value_t<iterator_t<R>>; […] // 26.7.6.2 [range.ref.view], all view namespace views {inline constexpr unspecified all = unspecified; }inline constexpr unspecified all = unspecified; template<viewable_range R> using all_tview= decltype(views::all(declval<R>())); } […] }
Globally replace all occurrences of all_view with views::all_t. There are 36 occurrences in addition to the definition in the <ranges> synopsis that was changed above.