template<typename
DerivedT, typename WrappedIteratorT, typename IteratorCategoryT = typename std::iterator_traits<WrappedIteratorT>::iterator_category, typename T = typename std::iterator_traits<WrappedIteratorT>::value_type, typename DifferenceTypeT = typename std::iterator_traits<WrappedIteratorT>::difference_type, typename PointerT = std::conditional_t< std::is_same_v<T, typename std::iterator_traits<WrappedIteratorT>:: value_type>, typename std::iterator_traits<WrappedIteratorT>::pointer, T* >, typename ReferenceT = std::conditional_t< std::is_same_v<T, typename std::iterator_traits<WrappedIteratorT>:: value_type>, typename std::iterator_traits<WrappedIteratorT>::reference, T& >>
class LIEF::iterator_adaptor_base< DerivedT, WrappedIteratorT, IteratorCategoryT, T, DifferenceTypeT, PointerT, ReferenceT >
CRTP base class for adapting an iterator to a different type.
This class can be used through CRTP to adapt one iterator into another. Typically this is done through providing in the derived class a custom operator* implementation. Other methods can be overridden as well.