libstdc++: Implement LWG 3820/3849 changes to cartesian_product_view
authorPatrick Palka <ppalka@redhat.com>
Thu, 9 Mar 2023 18:41:03 +0000 (13:41 -0500)
committerPatrick Palka <ppalka@redhat.com>
Thu, 9 Mar 2023 18:41:03 +0000 (13:41 -0500)
commit96abc8222464fb1c4fba9f2ffe3fd1b081a9196e
tree5ea2eea5ebc154c8bba8fae31af1d9ed5905b1d4
parent065c93b89c5e97dcbfd79ee5172cf6800c286896
libstdc++: Implement LWG 3820/3849 changes to cartesian_product_view

The LWG 3820 testcase revealed a bug in _M_advance, which this patch
also fixes.

libstdc++-v3/ChangeLog:

* include/std/ranges
(cartesian_product_view::_Iterator::_Iterator): Remove
constraint on default constructor as per LWG 3849.
(cartesian_product_view::_Iterator::_M_prev): Adjust position
of _Nm > 0 test as per LWG 3820.
(cartesian_product_view::_Iterator::_M_advance): Perform bounds
checking only on sized cartesian products.
* testsuite/std/ranges/cartesian_product/1.cc (test08): New test.
libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/cartesian_product/1.cc