changed the order of the template params in iterator_adaptor so that

traits comes before non-const iterator because it may not have a default
in the case of VC++


[SVN r7645]
This commit is contained in:
Jeremy Siek
2000-07-27 14:44:39 +00:00
parent b8b3bafc7c
commit d75da09a25

View File

@@ -65,11 +65,18 @@ struct default_iterator_policies
// Traits - a class satisfying the same requirements as a specialization of // Traits - a class satisfying the same requirements as a specialization of
// std::iterator_traits for the resulting iterator. // std::iterator_traits for the resulting iterator.
// //
template <class Iterator, class Policies, class NonconstIterator = Iterator, class Traits = std::iterator_traits<Iterator> > template <class Iterator, class Policies,
#ifndef BOOST_NO_ITERATOR_TRAITS
class Traits = std::iterator_traits<Iterator>,
#else
class Traits,
#endif
class NonconstIterator = Iterator
>
struct iterator_adaptor struct iterator_adaptor
: std::iterator<typename Traits::iterator_category, typename Traits::value_type, typename Traits::difference_type, typename Traits::pointer, typename Traits::reference> : std::iterator<typename Traits::iterator_category, typename Traits::value_type, typename Traits::difference_type, typename Traits::pointer, typename Traits::reference>
{ {
typedef iterator_adaptor<Iterator, Policies, NonconstIterator, Traits> Self; typedef iterator_adaptor<Iterator, Policies, Traits, NonconstIterator> Self;
public: public:
typedef typename Traits::difference_type difference_type; typedef typename Traits::difference_type difference_type;
typedef typename Traits::value_type value_type; typedef typename Traits::value_type value_type;
@@ -81,11 +88,11 @@ public:
: m_impl(impl) {} : m_impl(impl) {}
template <class OtherTraits> template <class OtherTraits>
iterator_adaptor(const iterator_adaptor<NonconstIterator, Policies, NonconstIterator, OtherTraits>& rhs) iterator_adaptor(const iterator_adaptor<NonconstIterator, Policies, OtherTraits, NonconstIterator>& rhs)
: m_impl(rhs.m_impl) {} : m_impl(rhs.m_impl) {}
template <class OtherTraits> template <class OtherTraits>
Self& operator=(const iterator_adaptor<NonconstIterator, Policies, NonconstIterator, OtherTraits>& rhs) Self& operator=(const iterator_adaptor<NonconstIterator, Policies, OtherTraits, NonconstIterator>& rhs)
{ m_impl = rhs.m_impl; return *this; } { m_impl = rhs.m_impl; return *this; }
reference operator*() const { reference operator*() const {
@@ -137,72 +144,72 @@ public: // too many compilers have trouble when this is private.
Iterator m_impl; Iterator m_impl;
}; };
template <class Iterator, class Policies, class NonconstIterator, class Traits> template <class Iterator, class Policies, class Traits, class NonconstIterator>
iterator_adaptor<Iterator,Policies,NonconstIterator,Traits> iterator_adaptor<Iterator,Policies,Traits,NonconstIterator>
operator-(iterator_adaptor<Iterator,Policies,NonconstIterator,Traits> p, const typename Traits::difference_type x) operator-(iterator_adaptor<Iterator,Policies,Traits,NonconstIterator> p, const typename Traits::difference_type x)
{ {
return p -= x; return p -= x;
} }
template <class Iterator, class Policies, class NonconstIterator, class Traits> template <class Iterator, class Policies, class Traits, class NonconstIterator>
iterator_adaptor<Iterator,Policies,NonconstIterator,Traits> iterator_adaptor<Iterator,Policies,Traits,NonconstIterator>
operator+(iterator_adaptor<Iterator,Policies,NonconstIterator,Traits> p, const typename Traits::difference_type x) operator+(iterator_adaptor<Iterator,Policies,Traits,NonconstIterator> p, const typename Traits::difference_type x)
{ {
return p += x; return p += x;
} }
template <class Iterator, class Policies, class NonconstIterator, class Traits> template <class Iterator, class Policies, class Traits, class NonconstIterator>
iterator_adaptor<Iterator,Policies,NonconstIterator,Traits> iterator_adaptor<Iterator,Policies,Traits,NonconstIterator>
operator+(const typename Traits::difference_type x, iterator_adaptor<Iterator,Policies,NonconstIterator,Traits> p) operator+(const typename Traits::difference_type x, iterator_adaptor<Iterator,Policies,Traits,NonconstIterator> p)
{ {
return p += x; return p += x;
} }
template <class Iterator1, class Iterator2, class Policies, class NonconstIterator, class Traits1, class Traits2> template <class Iterator1, class Iterator2, class Policies, class Traits1, class Traits2, class NonconstIterator>
typename Traits1::difference_type operator-( typename Traits1::difference_type operator-(
const iterator_adaptor<Iterator1,Policies,NonconstIterator,Traits1>& x, const iterator_adaptor<Iterator1,Policies,Traits1,NonconstIterator>& x,
const iterator_adaptor<Iterator2,Policies,NonconstIterator,Traits2>& y ) const iterator_adaptor<Iterator2,Policies,Traits2,NonconstIterator>& y )
{ {
typedef typename Traits1::difference_type difference_type; typedef typename Traits1::difference_type difference_type;
return Policies::distance(type<difference_type>(), y.m_impl, x.m_impl); return Policies::distance(type<difference_type>(), y.m_impl, x.m_impl);
} }
template <class Iterator1, class Iterator2, class Policies, class NonconstIterator, class Traits1, class Traits2> template <class Iterator1, class Iterator2, class Policies, class Traits1, class Traits2, class NonconstIterator>
inline bool inline bool
operator==(const iterator_adaptor<Iterator1,Policies,NonconstIterator,Traits1>& x, const iterator_adaptor<Iterator2,Policies,NonconstIterator,Traits2>& y) { operator==(const iterator_adaptor<Iterator1,Policies,Traits1,NonconstIterator>& x, const iterator_adaptor<Iterator2,Policies,Traits2,NonconstIterator>& y) {
return Policies::equal(x.m_impl, y.m_impl); return Policies::equal(x.m_impl, y.m_impl);
} }
template <class Iterator1, class Iterator2, class Policies, class NonconstIterator, class Traits1, class Traits2> template <class Iterator1, class Iterator2, class Policies, class Traits1, class Traits2, class NonconstIterator>
inline bool inline bool
operator<(const iterator_adaptor<Iterator1,Policies,NonconstIterator,Traits1>& x, const iterator_adaptor<Iterator2,Policies,NonconstIterator,Traits2>& y) { operator<(const iterator_adaptor<Iterator1,Policies,Traits1,NonconstIterator>& x, const iterator_adaptor<Iterator2,Policies,Traits2,NonconstIterator>& y) {
return Policies::less(x.m_impl, y.m_impl); return Policies::less(x.m_impl, y.m_impl);
} }
template <class Iterator1, class Iterator2, class Policies, class NonconstIterator, class Traits1, class Traits2> template <class Iterator1, class Iterator2, class Policies, class Traits1, class Traits2, class NonconstIterator>
inline bool inline bool
operator>(const iterator_adaptor<Iterator1,Policies,NonconstIterator,Traits1>& x, operator>(const iterator_adaptor<Iterator1,Policies,Traits1,NonconstIterator>& x,
const iterator_adaptor<Iterator2,Policies,NonconstIterator,Traits2>& y) { const iterator_adaptor<Iterator2,Policies,Traits2,NonconstIterator>& y) {
return Policies::less(y.m_impl, x.m_impl); return Policies::less(y.m_impl, x.m_impl);
} }
template <class Iterator1, class Iterator2, class Policies, class NonconstIterator, class Traits1, class Traits2> template <class Iterator1, class Iterator2, class Policies, class Traits1, class Traits2, class NonconstIterator>
inline bool inline bool
operator>=(const iterator_adaptor<Iterator1,Policies,NonconstIterator,Traits1>& x, const iterator_adaptor<Iterator2,Policies,NonconstIterator,Traits2>& y) { operator>=(const iterator_adaptor<Iterator1,Policies,Traits1,NonconstIterator>& x, const iterator_adaptor<Iterator2,Policies,Traits2,NonconstIterator>& y) {
return !Policies::less(x.m_impl, y.m_impl); return !Policies::less(x.m_impl, y.m_impl);
} }
template <class Iterator1, class Iterator2, class Policies, class NonconstIterator, class Traits1, class Traits2> template <class Iterator1, class Iterator2, class Policies, class Traits1, class Traits2, class NonconstIterator>
inline bool inline bool
operator<=(const iterator_adaptor<Iterator1,Policies,NonconstIterator,Traits1>& x, operator<=(const iterator_adaptor<Iterator1,Policies,Traits1,NonconstIterator>& x,
const iterator_adaptor<Iterator2,Policies,NonconstIterator,Traits2>& y) { const iterator_adaptor<Iterator2,Policies,Traits2,NonconstIterator>& y) {
return !Policies::less(y.m_impl, x.m_impl); return !Policies::less(y.m_impl, x.m_impl);
} }
template <class Iterator1, class Iterator2, class Policies, class NonconstIterator, class Traits1, class Traits2> template <class Iterator1, class Iterator2, class Policies, class Traits1, class Traits2, class NonconstIterator>
inline bool inline bool
operator!=(const iterator_adaptor<Iterator1,Policies,NonconstIterator,Traits1>& x, operator!=(const iterator_adaptor<Iterator1,Policies,Traits1,NonconstIterator>& x,
const iterator_adaptor<Iterator2,Policies,NonconstIterator,Traits2>& y) { const iterator_adaptor<Iterator2,Policies,Traits2,NonconstIterator>& y) {
return !Policies::equal(x.m_impl, y.m_impl); return !Policies::equal(x.m_impl, y.m_impl);
} }