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.