[range.iota.iterator] and [range.transform.iterator] and [range.elements.iterator] all declare operator<=> similar to this:
friend constexpr compare_three_way_result_t<W> operator<=>( const iterator& x, const iterator& y) requires totally_ordered<W> && three_way_comparable<W>;
Similar to issue 3347 and issue 3387, this is ill-formed if three_way_comparable<W> is not satisfied, because compare_three_way_result_t<W> is invalid. This declaration is instantiated when the enclosing iterator type is instantiated, making any use of iota_view<W, B>::iterator ill-formed when three_way_comparable<W> is not satisfied.
We can either add an exposition-only safe-compare-three-way-result-t alias that denotes void or std::nonesuch for spaceship-less types, so the declaration is valid (and then disabled by the constraints), or simply make them return auto.