Add non-const overloads of op* and op-> to v1 iterator_interface. This

matches more closely what v2 does.

Fixes #59.
This commit is contained in:
Zach Laine
2022-11-18 19:54:40 -06:00
parent 24f9450297
commit 1dc2923434

View File

@@ -283,6 +283,13 @@ namespace boost { namespace stl_interfaces { BOOST_STL_INTERFACES_NAMESPACE_V1 {
using pointer = detail::pointer_t<Pointer, iterator_concept>;
using difference_type = DifferenceType;
template<typename D = Derived>
constexpr auto operator*()
noexcept(noexcept(*access::base(std::declval<D &>())))
-> decltype(*access::base(std::declval<D &>()))
{
return *access::base(derived());
}
template<typename D = Derived>
constexpr auto operator*() const
noexcept(noexcept(*access::base(std::declval<D const &>())))
@@ -291,6 +298,14 @@ namespace boost { namespace stl_interfaces { BOOST_STL_INTERFACES_NAMESPACE_V1 {
return *access::base(derived());
}
template<typename D = Derived>
constexpr auto operator-> () noexcept(
noexcept(detail::make_pointer<pointer>(*std::declval<D &>())))
-> decltype(
detail::make_pointer<pointer>(*std::declval<D &>()))
{
return detail::make_pointer<pointer>(*derived());
}
template<typename D = Derived>
constexpr auto operator-> () const noexcept(
noexcept(detail::make_pointer<pointer>(*std::declval<D const &>())))