views::concat(r) is well-formed when r is an output_rangeSection: 25.7.18.1 [range.concat.overview] Status: WP Submitter: Hewill Kang Opened: 2024-04-27 Last modified: 2024-07-08
Priority: Not Prioritized
View all issues with WP status.
Discussion:
Currently, views::concat will return views::all(r) when it takes only one argument,
which only requires that the type of r models viewable_range which includes output_range:
std::vector<int> v;
auto r = std::views::counted(std::back_inserter(v), 3);
auto c = std::views::concat(r); // well-formed
Since concat_view requires all ranges to be input_range, this seems inconsistent.
We should reject the above just like views::zip_transform still requires F to be
move_constructible in the case of an empty pack.
[2024-05-08; Reflector poll]
Set status to Tentatively Ready after seven votes in favour during reflector poll.
[St. Louis 2024-06-29; Status changed: Voting → WP.]
Proposed resolution:
This wording is relative to N4981.
Modify 25.7.18.1 [range.concat.overview] as indicated:
-2- The name
views::concatdenotes a customization point object (16.3.3.3.5 [customization.point.object]). Given a pack of subexpressionsEs..., the expressionviews::concat(Es...)is expression-equivalent to
(2.1) —
views::all(Es...)ifEsis a pack with only one element whose type modelsinput_range,(2.2) — otherwise,
concat_view(Es...).