Listing 3: <iterator>, part 2


        //  ITERATOR  TAGS
struct  input_iterator_tag  {};
struct  output_iterator_tag  {};
struct  forward_iterator_tag  {};
struct  bidirectional_iterator_tag  {};
struct  random_access_iterator_tag  {};

        //  TEMPLATE  FUNCTION  iterator_category
template<class  T,  class  Dist>  inline
    input_iterator_tag  iterator_category(
        const  input_iterator<T,  Dist>&)
    {input_iterator_tag  x;
    return  (x);  }
inline  output_iterator_tag  iterator_category(
        const  output_iterator&)
    {output_iterator_tag  x;
    return  (x);  }
template<class  T,  class  Dist>  inline
    forward_iterator_tag  iterator_category(
        const  forward_iterator<T,  Dist>&)
    {forward_iterator_tag  x;
    return  (x);  }
template<class  T,  class  Dist>  inline
    bidirectional_iterator_tag  iterator_category(
        const  bidirectional_iterator<T,  Dist>&)
    {bidirectional_iterator_tag  x;
    return  (x);  }
template<class  T,  class  Dist>  inline
    random_access_iterator_tag  iterator_category(
        const  random_access_iterator<T,  Dist>&)
    {random_access_iterator_tag  x;
    return  (x);  }
template<class  T>  inline
    random_access_iterator_tag  iterator_category(const  T  *)
    {random_access_iterator_tag  x;
    return  (x);  }
//End of File