From: Patrick Palka Date: Mon, 12 Oct 2020 17:46:24 +0000 (-0400) Subject: libstdc++: Apply proposed resolution for LWG 3450 X-Git-Tag: releases/gcc-10.3.0~734 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d445a86968459e837a3653f8d81bc03f1f3e2e15;p=thirdparty%2Fgcc.git libstdc++: Apply proposed resolution for LWG 3450 libstdc++-v3/ChangeLog: * include/std/ranges (take_while_view::begin): Constrain the const overload further as per LWG 3450. (take_while_view::end): Likewise. * testsuite/std/ranges/adaptors/take_while.cc: Add test for LWG 3450. (cherry picked from commit c5aad5a41838dbfd29ff114692ff9533b52746b4) --- diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 98aa0d6a7c86..23f7d9e32b1f 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -2202,6 +2202,7 @@ namespace views constexpr auto begin() const requires range + && indirect_unary_predicate> { return ranges::begin(_M_base); } constexpr auto @@ -2211,6 +2212,7 @@ namespace views constexpr auto end() const requires range + && indirect_unary_predicate> { return _Sentinel(ranges::end(_M_base), std::__addressof(*_M_pred)); } }; diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc index d587127b97eb..48771397f1d8 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc @@ -70,10 +70,20 @@ test03() b = ranges::end(v); } +void +test04() +{ + // LWG 3450 + auto v = views::single(1) | views::take_while([](int& x) { return true;}); + static_assert(ranges::range); + static_assert(!ranges::range); +} + int main() { test01(); test02(); test03(); + test04(); }