]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Some concat_view bugfixes [PR115215, PR115218, LWG 4082]
authorPatrick Palka <ppalka@redhat.com>
Wed, 5 Mar 2025 16:11:35 +0000 (11:11 -0500)
committerPatrick Palka <ppalka@redhat.com>
Wed, 5 Mar 2025 16:11:35 +0000 (11:11 -0500)
commit81c6c99efa6a7afd3082785a9ab7fb64d2c93e1d
treeed7f55f41cea6fe6f4e4d9e41e9feab968069fab
parent7439febd94368f42bc46885224e22d2f135fedb2
libstdc++: Some concat_view bugfixes [PR115215, PR115218, LWG 4082]

- Use __builtin_unreachable to suppress a false-positive "control
  reaches end of non-void function" warning in the recursive lambda
  (which the existing tests failed to notice since test01 wasn't
  being called at runtime)
- Relax the constraints on views::concat in the single-argument case
  as per PR115215
- Add an input_range requirement to that same case as per LWG 4082
- In the const-converting constructor of concat_view's iterator,
  don't require the first iterator to be default constructible

PR libstdc++/115215
PR libstdc++/115218

libstdc++-v3/ChangeLog:

* include/std/ranges
(concat_view::iterator::_S_invoke_with_runtime_index): Use
__builtin_unreachable in recursive lambda to certify it always
exits via 'return'.
(concat_view::iterator::iterator): In the const-converting
constructor, direct initialize _M_it.
(views::_Concat::operator()): Adjust constraints in the
single-argument case as per LWG 4082.
* testsuite/std/ranges/concat/1.cc (test01): Call it at runtime
too.
(test04): New test.

Reviewed-by: Tomasz KamiƄski <tkaminsk@redhat.com>
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/include/std/ranges
libstdc++-v3/testsuite/std/ranges/concat/1.cc