std::ranges...perator++,--(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

🌸 NAME 🌸

This is the std::ranges...perator++,--(3) page, aka std::ranges::join_view::iterator::operator++,--, from the C++ Standard Libary manual, bestie. πŸ’…

The name is std::ranges::join_view::iterator::operator++,--, and the description is literally the same: std::ranges::join_view::iterator::operator++,--. Slay.


✨ Synopsis ✨

Okay so here are the overloads, and every single one is since C++20. The /*iterator*/ and /*ref-is-glvalue*/ bits are placeholders exactly as written, iykyk.

(1) (since C++20):

constexpr /*iterator*/& operator++();

(2) (since C++20):

constexpr void operator++( int );

(3) (since C++20):

constexpr /*iterator*/ operator++( int )
    requires /*ref-is-glvalue*/ && ranges::forward_range<Base> &&
             ranges::forward_range<ranges::range_reference_t<Base>>;

(4) (since C++20):

constexpr iterator& operator--()
    requires /*ref-is-glvalue*/ && ranges::bidirectional_range<Base> &&
             ranges::bidirectional_range<ranges::range_reference_t<Base>> &&
             ranges::common_range<ranges::range_reference_t<Base>>;

(5) (since C++20):

constexpr /*iterator*/ operator--( int )
    requires /*ref-is-glvalue*/ && ranges::bidirectional_range<Base> &&
             ranges::bidirectional_range<ranges::range_reference_t<Base>> &&
             ranges::common_range<ranges::range_reference_t<Base>>;

These increment or decrement the underlying iterator. πŸŽ€

Let inner_ and outer_ be the underlying iterators, and parent_ be the pointer to parent ranges::join_view, and the constant /*ref-is-glvalue*/ be std::is_reference_v<ranges::range_reference_t<Base>>. Periodt.

1) Let /*inner-range*/ be:

  • *outer_, if /*ref-is-glvalue*/ == true;
  • *parent_->inner_ otherwise.

Equivalent to:

auto&& inner_rng = /*inner-range*/;
if (++inner_ == ranges::end(inner_rng)) {
    ++outer_;
    satisfy();
}
return *this;

2) Equivalent to: ++*this.

3) Equivalent to:

auto tmp = *this;
++*this;
return tmp;

4) Equivalent to:

if (outer_ == ranges::end(parent_->base_))
    inner_ = ranges::end(*--outer_);
while (inner_ == ranges::begin(*outer_))
    inner_ = ranges::end(*--outer_);
--inner_;
return *this;

5) Equivalent to:

auto tmp = *this;
--*this;
return tmp;

🫢 Parameters 🫢

(none) β€” no parameters, bestie. Literally none. Zero. Zilch. πŸ’–


πŸ‘‘ Return value πŸ‘‘

  • 1,4) *this
  • 2) (none)
  • 3,5) a copy of *this that was made before the change

That's the whole page, bestie! Source/version: http://cppreference.com; date: 2024.06.10; page: std::ranges...perator++,--(3). Mwah πŸ’‹

πŸ“¦ where this page comes from