https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119415
--- Comment #11 from 康桓瑋 <hewillk at gmail dot com> ---
> Use __cpp17_input_iterator can still produce hard errors in some edge cases.
With "hard errors", I mean the following:
struct I {
using difference_type = int;
using value_type = int;
int operator*() const;
I& operator++();
I operator++(int);
bool operator==(const I&) const;
};
template<>
struct std::iterator_traits<I> {
using difference_type = I::difference_type;
using value_type = I::value_type;
using iterator_concept = std::input_iterator_tag;
// no iterator_category
};
std::ranges::subrange s{I{}, I{}};
Even though such a range seems completely contrived.