In C++ Template Metaprogramming book, there is the expression i::category in tables 5.1, 5.2 and 5.3 that says that the result is convertible to mpl::forward_iterator_tag, mpl::bidirectional_iterator_tag and mpl::random_access_iterator_tag respectively. Since a random access iterator is bidirectional iterator which is in turn a forward iterator, I was expecting that i::category for a bidirectional iterator would also be convertible to mpl::forward_tag which is not the case. So if an algorithm has to works differently for random-access iterator but it the same for forward and bidirectional iterator, it seems to me that I would need some extra logic to uses forward iterator algorithm if I have a bidirectional iterator as theree are no implicit conversion. In fact, in the implementation we derives from int_<n> where n is 0, 1 or 2 depending on the iterator type. Philippe