]> gcc.gnu.org Git - gcc.git/commit
libstdc++: extraneous begin in cartesian_product_view::end [PR107572]
authorPatrick Palka <ppalka@redhat.com>
Thu, 9 Mar 2023 18:25:44 +0000 (13:25 -0500)
committerPatrick Palka <ppalka@redhat.com>
Thu, 9 Mar 2023 18:25:44 +0000 (13:25 -0500)
commit3df9760d56662bdf38dd45f7398f003bbd64fdfe
tree6fafe86659845799b304eafc26df20091727eda3
parentf366fdfeec0af6cda716de913c32e48f9b1e3a0e
libstdc++: extraneous begin in cartesian_product_view::end [PR107572]

ranges::begin() isn't guaranteed to be equality-preserving for non-forward
ranges, so in cartesian_product_view::end we need to avoid needlessly
calling begin() on the first range (which could be non-forward) in the
case where __empty_tail is false as per its specification.

Since we're already using a variadic lambda to compute __empty_tail, we
might as well use that same lambda to build up the tuple of iterators
instead of building it separately via e.g. std::apply or __tuple_transform.

PR libstdc++/107572

libstdc++-v3/ChangeLog:

* include/std/ranges (cartesian_product_view::end): When
building the tuple of iterators, avoid calling ranges::begin on
the first range if __empty_tail is false.
* testsuite/std/ranges/cartesian_product/1.cc (test07): New test.
libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc
This page took 0.056976 seconds and 6 git commands to generate.