579class reverse_iterator<Itr,
true> final
580 :
public reverse_iterator_detail::reverse_iterator_base<Itr>
581 , generic_ordering_from_three_way_compare<reverse_iterator<Itr>> {
583 using reviter_base = reverse_iterator_detail::reverse_iterator_base<Itr>;
585 using ordering_base = generic_ordering_from_three_way_compare<reverse_iterator<Itr>>;
589 using typename reviter_base::difference_type;
590 using typename reviter_base::iterator_category;
591 using typename reviter_base::pointer;
592 using typename reviter_base::reference;
593 using typename reviter_base::value_type;
596 constexpr reverse_iterator() =
default;
600 constexpr reverse_iterator(reverse_iterator
const& other)
noexcept =
default;
604 constexpr reverse_iterator(reverse_iterator&& other)
noexcept =
default;
609 constexpr auto operator=(reverse_iterator
const& other)
noexcept -> reverse_iterator& =
default;
614 constexpr auto operator=(reverse_iterator&& other)
noexcept -> reverse_iterator& =
default;
617 ~reverse_iterator() =
default;
623 constexpr explicit reverse_iterator(Itr iter)
noexcept(std::is_nothrow_copy_constructible<Itr>::value)
624 : reviter_base(iter),
635 std::enable_if_t<!std::is_same<U, Itr>::value>,
636 std::enable_if_t<std::is_convertible<U
const&, Itr>::value>> =
nullptr>
637 constexpr explicit reverse_iterator(reverse_iterator<U>
const& iter
638 )
noexcept(std::is_nothrow_constructible<Itr, U
const&>::value&&
noexcept(iter.base()))
639 : reviter_base(iter.base()),
647 constexpr reverse_iterator(reverse_iterator_detail::std_reverse_iterator<Itr>
const& iter
648 )
noexcept(std::is_nothrow_constructible<reviter_base, Itr>::value&&
noexcept(iter.base()))
649 : reviter_base(iter.base()),
658 constexpr operator reverse_iterator_detail::std_reverse_iterator<Itr>()
const
659 noexcept(std::is_nothrow_constructible<reverse_iterator_detail::std_reverse_iterator<Itr>, Itr>::value&&
noexcept(
660 std::declval<reverse_iterator>().base()
662 return reverse_iterator_detail::std_reverse_iterator<Itr>{
this->base()};
670 ARENE_NODISCARD
constexpr auto operator->()
const noexcept -> pointer {
return this->itr_for_access(); }
678 ARENE_NODISCARD
constexpr auto operator[](difference_type
const delta)
const noexcept -> reference {
679 return *(*
this + delta);
686 constexpr auto operator++()
noexcept -> reverse_iterator& {
696 constexpr auto operator++(
int)
noexcept -> reverse_iterator {
707 constexpr auto operator--()
noexcept -> reverse_iterator& {
717 constexpr auto operator--(
int)
noexcept -> reverse_iterator {
733 ARENE_NODISCARD
friend constexpr auto operator+(reverse_iterator iter, difference_type
const delta)
noexcept
734 -> reverse_iterator {
750 ARENE_NODISCARD
friend constexpr auto operator+(difference_type
const delta, reverse_iterator
const& iter)
noexcept
751 -> reverse_iterator {
766 ARENE_NODISCARD
friend constexpr auto operator-(reverse_iterator iter, difference_type
const delta)
noexcept
767 -> reverse_iterator {
783 ARENE_NODISCARD
friend constexpr auto operator-(reverse_iterator
const lhs, reverse_iterator
const rhs)
noexcept
785 return ::arene::base::distance(lhs.itr_, rhs.itr_);
795 constexpr auto operator+=(difference_type
const delta)
noexcept -> reverse_iterator& {
796 this->itr_ = ::arene::base::prev(
this->itr_, delta);
805 constexpr auto operator-=(difference_type
const delta)
noexcept -> reverse_iterator& {
806 this->itr_ = ::arene::base::next(
this->itr_, delta);
819 template <
typename U, constraints<std::enable_if_t<compare_three_way_supported_v<U, Itr>>> =
nullptr>
820 ARENE_NODISCARD
static constexpr auto
821 three_way_compare(reverse_iterator
const& lhs, reverse_iterator<U>
const& rhs)
noexcept -> strong_ordering {
822 return compare_three_way{}(rhs.itr_, lhs.itr_);
834 template <
typename U, constraints<std::enable_if_t<compare_three_way_supported_v<U, Itr>>> =
nullptr>
835 ARENE_NODISCARD
static constexpr auto
836 three_way_compare(reverse_iterator
const& lhs, reverse_iterator_detail::std_reverse_iterator<U>
const& rhs)
noexcept
838 return compare_three_way{}(rhs.base(), lhs.itr_);
Copyright 2026, Toyota Motor Corporation.
Definition array_exceptions_disabled.cpp:10