diff --git a/libcxx/include/__iterator/counted_iterator.h b/libcxx/include/__iterator/counted_iterator.h --- a/libcxx/include/__iterator/counted_iterator.h +++ b/libcxx/include/__iterator/counted_iterator.h @@ -96,7 +96,7 @@ } _LIBCPP_HIDE_FROM_ABI - constexpr const _Iter& base() const& { return __current_; } + constexpr const _Iter& base() const& noexcept { return __current_; } _LIBCPP_HIDE_FROM_ABI constexpr _Iter base() && { return _VSTD::move(__current_); } diff --git a/libcxx/test/std/iterators/predef.iterators/counted.iterator/base.pass.cpp b/libcxx/test/std/iterators/predef.iterators/counted.iterator/base.pass.cpp --- a/libcxx/test/std/iterators/predef.iterators/counted.iterator/base.pass.cpp +++ b/libcxx/test/std/iterators/predef.iterators/counted.iterator/base.pass.cpp @@ -32,17 +32,18 @@ { std::counted_iterator iter(cpp20_input_iterator{buffer}, 8); - assert(iter.base().base() == buffer); - assert(std::move(iter).base().base() == buffer); + assert(base(iter.base()) == buffer); + assert(base(std::move(iter).base()) == buffer); + ASSERT_NOEXCEPT(iter.base()); ASSERT_SAME_TYPE(decltype(iter.base()), const cpp20_input_iterator&); ASSERT_SAME_TYPE(decltype(std::move(iter).base()), cpp20_input_iterator); } { std::counted_iterator iter(forward_iterator{buffer}, 8); - assert(iter.base() == forward_iterator{buffer}); - assert(std::move(iter).base() == forward_iterator{buffer}); + assert(base(iter.base()) == buffer); + assert(base(std::move(iter).base()) == buffer); ASSERT_SAME_TYPE(decltype(iter.base()), const forward_iterator&); ASSERT_SAME_TYPE(decltype(std::move(iter).base()), forward_iterator); @@ -50,8 +51,8 @@ { std::counted_iterator iter(contiguous_iterator{buffer}, 8); - assert(iter.base() == contiguous_iterator{buffer}); - assert(std::move(iter).base() == contiguous_iterator{buffer}); + assert(base(iter.base()) == buffer); + assert(base(std::move(iter).base()) == buffer); ASSERT_SAME_TYPE(decltype(iter.base()), const contiguous_iterator&); ASSERT_SAME_TYPE(decltype(std::move(iter).base()), contiguous_iterator); @@ -68,8 +69,8 @@ { const std::counted_iterator iter(cpp20_input_iterator{buffer}, 8); - assert(iter.base().base() == buffer); - assert(std::move(iter).base().base() == buffer); + assert(base(iter.base()) == buffer); + assert(base(std::move(iter).base()) == buffer); ASSERT_SAME_TYPE(decltype(iter.base()), const cpp20_input_iterator&); ASSERT_SAME_TYPE(decltype(std::move(iter).base()), const cpp20_input_iterator&); @@ -77,8 +78,8 @@ { const std::counted_iterator iter(forward_iterator{buffer}, 7); - assert(iter.base() == forward_iterator{buffer}); - assert(std::move(iter).base() == forward_iterator{buffer}); + assert(base(iter.base()) == buffer); + assert(base(std::move(iter).base()) == buffer); ASSERT_SAME_TYPE(decltype(iter.base()), const forward_iterator&); ASSERT_SAME_TYPE(decltype(std::move(iter).base()), const forward_iterator&); @@ -86,8 +87,8 @@ { const std::counted_iterator iter(contiguous_iterator{buffer}, 6); - assert(iter.base() == contiguous_iterator{buffer}); - assert(std::move(iter).base() == contiguous_iterator{buffer}); + assert(base(iter.base()) == buffer); + assert(base(std::move(iter).base()) == buffer); ASSERT_SAME_TYPE(decltype(iter.base()), const contiguous_iterator&); ASSERT_SAME_TYPE(decltype(std::move(iter).base()), const contiguous_iterator&);