Hans Dembinski wrote:
compare vs. distance_to
This reminds me of an issue that I've found with the existing iterator_facade: sometimes I can magnitude-compare the iterators, but not report a distance. For example, a simple filter iterator can quickly tell whether A is before or after B by comparing the underlying iterators, but it cannot find the distance without applying its filter predicate to all the intermediate elements. Currently, operator< etc. in the facade are implemented by calling the user's distance_to which is inefficient in this case. Your change of name to compare made me wonder if it is now expected only to return -1/0/+1, but that doesn't seem to be the case. The other thing that I've found tedious to do with the current iterator_facade is implementing both iterator and const_iterator. The pattern I tend to use is: template <bool is_const> class iterator_base: public boost::iterator_facade< ......... > ...... using iterator = iterator_base<false>; using const_iterator = iterator_base<true>; I don't know if there is anything that iterator_facade could do to make this easier. Regards, Phil.