anything that can be reasonably converted to an iterator: std::contigious_iterator, eve::algo::iterator, aligned_ptr. Defined as being totally_ordered, having +/- like an iterator And preprocess_range(eve::algo::traits{}, I, I) should work. eve::unalign(I) should be OK.
More...
#include <eve/module/algo/algo/concepts/relaxed.hpp>
+/- with std::ptrdiff_t don't have to work for arbitrary N, behaviour along the lines of eve::aligned_ptr is sufficient.
result of eve::unalign(I) should return an iterator that can represent any position.
Required header: #include <eve/module/algo/algo/concepts.hpp>