[Bug libstdc++/95322] New: std::list | take | transform, expression does not work cbegin() == end()
gcc-bugs at marehr dot dialup.fu-berlin.de
gcc-bugzilla@gcc.gnu.org
Mon May 25 18:16:15 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95322
Bug ID: 95322
Summary: std::list | take | transform, expression does not work
cbegin() == end()
Product: gcc
Version: 10.1.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
Assignee: unassigned at gcc dot gnu.org
Reporter: gcc-bugs at marehr dot dialup.fu-berlin.de
Target Milestone: ---
Hello gcc-team,
I'm not sure if this is intended behaviour, or if this is a defect in the
standard, or something that you should never write in a generic context.
ASFAIK you can use that expression on any container and on any view, but not on
some(?!) combinations of views? This is a bit unexpected.
```c++
#include <concepts>
#include <list>
#include <ranges>
int main()
{
std::list v{0,1 ,2, 3, 4, 5, 5, 6}; // works if std::vector
auto view1 = v | std::views::take(5);
auto view2 = v | std::views::transform([] (int i) { return i + 3;});
auto view3 = view1 | std::views::transform([] (int i) { return i + 3;});
std::ranges::cbegin(view1) == std::ranges::end(view1); // works
std::ranges::cbegin(view2) == std::ranges::end(view2); // works
std::ranges::cbegin(view3) == std::ranges::end(view3); // does not work
return 0;
}
```
https://godbolt.org/z/4Nzr69
More information about the Gcc-bugs
mailing list