transform_iterator( transform_iterator<OtherUnaryFunction, OtherIterator, OtherReference, OtherValue> const& t , typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 #if !POTHOS_WORKAROUND(POTHOS_MSVC, == 1310) , typename enable_if_convertible<OtherUnaryFunction, UnaryFunc>::type* = 0 #endif ) : super_t(t.base()), m_f(t.functor()) {}
transform_iterator( transform_iterator< OtherIterator, OtherTransformer, OtherReference, OtherValue > const& t, typename std::enable_if< std::is_convertible<OtherIterator, Iterator>::value && std::is_convertible<OtherTransformer, Transformer>::value >::type* = 0) : base_type(t.base()), transformer_(t.transformer()) {}
friend bool operator== (const transform_iterator& i, const transform_iterator& i2) { return i.equal(i2); }
friend typename Iterator::difference_type operator- (const transform_iterator& i, const transform_iterator& i2) { return i2.distance_to(i); }
transform_iterator(const transform_iterator<InputIterator, UnaryFunction> &other) : super_type(other.base()), m_transform(other.m_transform) { }
BOOST_INTRUSIVE_FORCEINLINE friend typename Iterator::difference_type operator- (const transform_iterator& i, const transform_iterator& i2) { return i2.distance_to(i); }
BOOST_INTRUSIVE_FORCEINLINE friend bool operator== (const transform_iterator& i, const transform_iterator& i2) { return i.equal(i2); }
constexpr auto operator-(const transform_iterator<T, IterT, FunT> &i1, const transform_iterator<T, IterT, FunT> &i2) { return i1.base() - i2.base(); }
constexpr bool operator<(const transform_iterator<T, IterT, FunT> &i1, const transform_iterator<T, IterT, FunT> &i2) { return i1.base() < i2.base(); }
friend typename std::iterator_traits<Iterator>::difference_type operator- (const transform_iterator& i, const transform_iterator& i2) { return i2.distance_to(i); }