forked from boostorg/iterator
Reverted: 2e099caceb9..21102938e8ccb I'm going to reapply some of them soon, but it's easier to revert them all first, as there are conflicts. Also the number of changes that were inserted since then, mean that there would be a huge gap between related changes.
93 lines
2.0 KiB
C++
93 lines
2.0 KiB
C++
// 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
|