In this chapter, Matthew Wilson explains that a filtering iterator adaptor must be instantiated from an iterator pair defining the viable range of the adapted range, and that by applying the adapted_iterator_traits traits class, we can achieve a simple definition for what is a sophisticated iterator adaptation.

42.1 Introduction

We saw in Chapter 36 that transforming an iterator is a matter of applying a unary function to the dereference. Can we do this with a predicate, to filter out items? We might imagine something like the following: