// { dg-do run { target c++20 } }

template<class, class> constexpr bool is_same_v = false;
template<class T> constexpr bool is_same_v<T, T> = true;

template<class T, class U>
concept Same = is_same_v<T, U>;

template<class T, class U>
concept Diff = requires(T& t, U& u) { u - t; };

template<class I, class S>
int distance(I, S) { return 0; }

template<class I, Diff<I> S>
int distance(I first, S last)
{
  return last - first;
}

template<class T>
struct I
{
  template<class U>
    requires Same<T, U>
  friend int operator-(I const&, I<U> const&)
  {
    static_assert(Same<T, U>);
    return 42;
  }
};

int main()
{
  return distance(I<int>{}, I<void>{});
}
