https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106676
--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> --- The whole point of adding iterator_concept was to allow it to vary from iterator_category, for iterators that do not meet the old requirements pre-C++20. C++20 ranges and views work with types of iterators which do not meet the classic STL requirements. Rather than changing the meaning of iterator_category and potentially breaking 20+ years of STL-style code, the range adaptors have iterators that don't pretend to be valid STL-style iterators when they fail to meet the requirements. If you don't care about the classic requirements, use iterator_concept instead. https://eel.is/c++draft/iterator.traits#4