// 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 # include 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 struct iterator_value { typedef typename detail::iterator_traits::value_type type; }; template struct iterator_reference { typedef typename detail::iterator_traits::reference type; }; template struct iterator_pointer { typedef typename detail::iterator_traits::pointer type; }; template struct iterator_difference { typedef typename detail::iterator_traits::difference_type type; }; template struct BOOST_ITERATOR_CATEGORY { typedef typename detail::iterator_traits::iterator_category type; }; # if BOOST_WORKAROUND(BOOST_MSVC, < 1300) template <> struct iterator_value { typedef void type; }; template <> struct iterator_reference { typedef void type; }; template <> struct iterator_pointer { typedef void type; }; template <> struct iterator_difference { typedef void type; }; template <> struct BOOST_ITERATOR_CATEGORY { typedef void type; }; # endif } // namespace boost::iterator #endif // ITERATOR_TRAITS_DWA200347_HPP