Tested on x86_64-pc-linux-gnu, does this look OK for trunk/10/11? libstdc++-v3/ChangeLog:
* include/std/ranges (filter_view::_Iterator::base): Make the const& overload return a const reference and remove its constraint as per LWG 3533. Make unconditionally noexcept. (transform_view::_Iterator::base): Likewise. (elements_view::_Iterator::base): Likewise. --- libstdc++-v3/include/std/ranges | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges index 7075fa3ae6e..bc11505c167 100644 --- a/libstdc++-v3/include/std/ranges +++ b/libstdc++-v3/include/std/ranges @@ -1199,9 +1199,8 @@ namespace views::__adaptor _M_parent(__parent) { } - constexpr _Vp_iter - base() const & - requires copyable<_Vp_iter> + constexpr const _Vp_iter& + base() const & noexcept { return _M_current; } constexpr _Vp_iter @@ -1467,9 +1466,8 @@ namespace views::__adaptor : _M_current(std::move(__i._M_current)), _M_parent(__i._M_parent) { } - constexpr _Base_iter - base() const & - requires copyable<_Base_iter> + constexpr const _Base_iter& + base() const & noexcept { return _M_current; } constexpr _Base_iter @@ -3403,8 +3401,8 @@ namespace views::__adaptor : _M_base(std::move(base)) { } - constexpr _Vp - base() const& requires copy_constructible<_Vp> + constexpr const _Vp& + base() const & noexcept { return _M_base; } constexpr _Vp -- 2.31.1.442.g7e39198978