[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