// { dg-options "-std=gnu++20" }
// { dg-do compile { target c++20 } }
#include <iterator>
struct movable_iterator
{
  using difference_type = long;
  movable_iterator() = default;
  movable_iterator(movable_iterator&&) = default;
  movable_iterator& operator=(movable_iterator&&) = default;
  int operator*() const { return 1; }
  movable_iterator& operator++() { return *this; }
  void operator++(int) { }
  bool operator==(const movable_iterator&) const = default;
};
using namespace std;
constexpr counted_iterator<movable_iterator> it({}, 3);
static_assert( sized_sentinel_for<std::default_sentinel_t, counted_iterator<movable_iterator>> );
// LWG 3392
// ranges::distance() cannot be used on a move-only iterator
// with a sized sentinel
static_assert( ranges::distance(it, default_sentinel) == 3 );