Listing 2
template <typename C> class sequence_range { public: typedef typename C::reference reference; typedef typename C::const_reference const_reference; typedef typename C::iterator iterator; public: sequence_range(C &c) : m_current(c.begin()) , m_end(c.end()) {} public: reference current() { return *m_current; } const_reference current() const { return *m_current; } bool is_open() const { return m_current != m_end; } void advance() { ++m_current; } private: iterator m_current; iterator m_end; };