https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105609

            Bug ID: 105609
           Summary: ranges::move(_backward) should use ranges​::​iter_move
                    instead of std​::​move
           Product: gcc
           Version: 12.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hewillk at gmail dot com
  Target Milestone: ---

This is specified in [alg.move].

#include <algorithm>

struct O {
  O(int&);
  O(int&&) = delete;
};

struct I {
  using value_type = int;
  using difference_type = std::ptrdiff_t;
  int operator*() const;
  I& operator++();
  I operator++(int);
  I& operator--();
  I operator--(int);
  bool operator==(I) const;
  friend int& iter_move(const I&);
};

int main() {
  O* o = nullptr;
  std::ranges::move(I{}, I{}, o);
  std::ranges::move_backward(I{}, I{}, o);
}

https://godbolt.org/z/KoxEPbPrP

Reply via email to