The exposition-only has-arrow concept is ill-formed. It has a constrained template parameter, which is not valid C++20. Proposed change: Change the concept to: <pre> template<class I> concept has-arrow = // exposition only input_iterator && (is_pointer_v<I> || requires(I i) { i.operator->(); }); </pre>