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