Removed workarounds for older compilers from permutation_iterator.hpp.

This commit is contained in:
Andrey Semashev
2025-02-07 00:19:46 +03:00
parent a91fc06bb4
commit 34f703cfb6

View File

@ -5,8 +5,8 @@
// accompanying file LICENSE_1_0.txt or copy at // accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt) // http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_PERMUTATION_ITERATOR_HPP #ifndef BOOST_ITERATOR_PERMUTATION_ITERATOR_HPP_INCLUDED_
#define BOOST_PERMUTATION_ITERATOR_HPP #define BOOST_ITERATOR_PERMUTATION_ITERATOR_HPP_INCLUDED_
#include <iterator> #include <iterator>
@ -17,54 +17,62 @@
namespace boost { namespace boost {
namespace iterators { namespace iterators {
template< class ElementIterator template< typename ElementIterator, typename IndexIterator >
, class IndexIterator> class permutation_iterator :
class permutation_iterator public iterator_adaptor<
: public iterator_adaptor< permutation_iterator< ElementIterator, IndexIterator >,
permutation_iterator<ElementIterator, IndexIterator> IndexIterator,
, IndexIterator, typename std::iterator_traits<ElementIterator>::value_type typename std::iterator_traits< ElementIterator >::value_type,
, use_default, typename std::iterator_traits<ElementIterator>::reference> use_default,
typename std::iterator_traits< ElementIterator >::reference
>
{ {
typedef iterator_adaptor< friend class iterator_core_access;
permutation_iterator<ElementIterator, IndexIterator> template< typename, typename >
, IndexIterator, typename std::iterator_traits<ElementIterator>::value_type friend class permutation_iterator;
, use_default, typename std::iterator_traits<ElementIterator>::reference> super_t;
friend class iterator_core_access;
public:
permutation_iterator() : m_elt_iter() {}
explicit permutation_iterator(ElementIterator x, IndexIterator y)
: super_t(y), m_elt_iter(x) {}
template<class OtherElementIterator, class OtherIndexIterator>
permutation_iterator(
permutation_iterator<OtherElementIterator, OtherIndexIterator> const& r
, typename enable_if_convertible<OtherElementIterator, ElementIterator>::type* = 0
, typename enable_if_convertible<OtherIndexIterator, IndexIterator>::type* = 0
)
: super_t(r.base()), m_elt_iter(r.m_elt_iter)
{}
private: private:
typename super_t::reference dereference() const using super_t = iterator_adaptor<
{ return *(m_elt_iter + *this->base()); } permutation_iterator< ElementIterator, IndexIterator >,
IndexIterator,
typename std::iterator_traits< ElementIterator >::value_type,
use_default,
typename std::iterator_traits< ElementIterator >::reference
>;
#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS public:
template <class,class> friend class permutation_iterator; permutation_iterator() :
#else m_elt_iter()
public: {}
#endif
explicit permutation_iterator(ElementIterator x, IndexIterator y) :
super_t(y),
m_elt_iter(x)
{}
template<
typename OtherElementIterator,
typename OtherIndexIterator,
typename = enable_if_convertible_t< OtherElementIterator, ElementIterator >,
typename = enable_if_convertible_t< OtherIndexIterator, IndexIterator >
>
permutation_iterator(permutation_iterator< OtherElementIterator, OtherIndexIterator > const& r) :
super_t(r.base()),
m_elt_iter(r.m_elt_iter)
{}
private:
typename super_t::reference dereference() const { return *(m_elt_iter + *this->base()); }
private:
ElementIterator m_elt_iter; ElementIterator m_elt_iter;
}; };
template <class ElementIterator, class IndexIterator> template< typename ElementIterator, typename IndexIterator >
inline permutation_iterator<ElementIterator, IndexIterator> inline permutation_iterator< ElementIterator, IndexIterator > make_permutation_iterator(ElementIterator e, IndexIterator i)
make_permutation_iterator( ElementIterator e, IndexIterator i )
{ {
return permutation_iterator<ElementIterator, IndexIterator>( e, i ); return permutation_iterator< ElementIterator, IndexIterator >(e, i);
} }
} // namespace iterators } // namespace iterators
@ -74,4 +82,4 @@ using iterators::make_permutation_iterator;
} // namespace boost } // namespace boost
#endif #endif // BOOST_ITERATOR_PERMUTATION_ITERATOR_HPP_INCLUDED_