// Copyright David Abrahams 2003.

// Distributed under the Boost Software License, Version 1.0. (See

// accompanying file LICENSE_1_0.txt or copy at

// http://www.boost.org/LICENSE_1_0.txt)

#ifndef ITERATOR_TRAITS_DWA200347_HPP

# define ITERATOR_TRAITS_DWA200347_HPP



# include <boost/detail/iterator.hpp>

# include <boost/detail/workaround.hpp>



namespace boost { 



// Unfortunately, g++ 2.95.x chokes when we define a class template

// iterator_category which has the same name as its

// std::iterator_category() function, probably due in part to the

// "std:: is visible globally" hack it uses.  Use

// BOOST_ITERATOR_CATEGORY to write code that's portable to older

// GCCs.



# if BOOST_WORKAROUND(__GNUC__, <= 2)

#  define BOOST_ITERATOR_CATEGORY iterator_category_

# else

#  define BOOST_ITERATOR_CATEGORY iterator_category

# endif





template <class Iterator>

struct iterator_value

{

    typedef typename boost::detail::iterator_traits<Iterator>::value_type type;

};

  

template <class Iterator>

struct iterator_reference

{

    typedef typename boost::detail::iterator_traits<Iterator>::reference type;

};

  

  

template <class Iterator>

struct iterator_pointer

{

    typedef typename boost::detail::iterator_traits<Iterator>::pointer type;

};

  

template <class Iterator>

struct iterator_difference

{

    typedef typename boost::detail::iterator_traits<Iterator>::difference_type type;

};



template <class Iterator>

struct BOOST_ITERATOR_CATEGORY

{

    typedef typename boost::detail::iterator_traits<Iterator>::iterator_category type;

};



# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)

template <>

struct iterator_value<int>

{

    typedef void type;

};

  

template <>

struct iterator_reference<int>

{

    typedef void type;

};



template <>

struct iterator_pointer<int>

{

    typedef void type;

};

  

template <>

struct iterator_difference<int>

{

    typedef void type;

};

  

template <>

struct BOOST_ITERATOR_CATEGORY<int>

{

    typedef void type;

};

# endif



} // namespace boost::iterator



#endif // ITERATOR_TRAITS_DWA200347_HPP

