diff options
author | Patrick Palka <ppalka@redhat.com> | 2020-10-12 13:46:24 -0400 |
---|---|---|
committer | Patrick Palka <ppalka@redhat.com> | 2020-10-12 13:46:24 -0400 |
commit | c5aad5a41838dbfd29ff114692ff9533b52746b4 (patch) | |
tree | b8c2de4f7b24bd6225243ee44817633b950caac2 | |
parent | e066821b6f6b7332c7a67981f7b33c9ba0ccaee7 (diff) | |
download | gcc-c5aad5a41838dbfd29ff114692ff9533b52746b4.zip gcc-c5aad5a41838dbfd29ff114692ff9533b52746b4.tar.gz gcc-c5aad5a41838dbfd29ff114692ff9533b52746b4.tar.bz2 |
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.
-rw-r--r-- | libstdc++-v3/include/std/ranges | 2 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/std/ranges/adaptors/take_while.cc | 10 |
2 files changed, 12 insertions, 0 deletions
diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 19bc01a..55e7c4d 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -1888,6 +1888,7 @@ namespace views constexpr auto begin() const requires range<const _Vp> + && indirect_unary_predicate<const _Pred, iterator_t<const _Vp>> { return ranges::begin(_M_base); } constexpr auto @@ -1897,6 +1898,7 @@ namespace views constexpr auto end() const requires range<const _Vp> + && indirect_unary_predicate<const _Pred, iterator_t<const _Vp>> { return _Sentinel<true>(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 d587127..4877139 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<decltype(v)>); + static_assert(!ranges::range<decltype(v) const>); +} + int main() { test01(); test02(); test03(); + test04(); } |