A class that provides a return type for iterator_category function that represents a bidirectional iterator.
The category tag classes are used as compile tags for algorithm selection. The template function needs to find the most specific category of its iterator argument, so that it can use the most efficient algorithm at compile time. For every iterator of type Iterator, iterator_traits<Iterator>::iterator_category must be defined to be the most specific category tag that describes the iterator's behavior.
The type is the same as iterator<Iter>::iterator_category when Iter describes an object that can serve as a bidirectional iterator.