template class PtrList : private std::list { typedef std::list base_class; public: inline void push_back (T* x) { base_class::push_back(x); } inline void push_front (T* x) { base_class::push_front(x); } friend class back_insert_iterator; friend class front_insert_iterator; class iterator : private base_class::iterator { public: friend class PtrList; inline iterator& operator++() { base_class::iterator::operator++(); return *this; } inline iterator operator++(int x) { return base_class::iterator::operator++(x); } inline iterator& operator--() { base_class::iterator::operator--(); return *this; } inline iterator operator--(int x) { return base_class::iterator::operator--(x); } inline bool operator==(const iterator& right) const { return base_class::iterator::operator==(right); } inline T* operator*() { return (T*)base_class::iterator::operator*(); } private: inline iterator ( const base_class::iterator & x) : base_class::iterator(x) {} }; iterator begin() { return iterator(base_class::begin()); } iterator end() { return iterator(base_class::end()); } }; template class back_insert_iterator > : private back_insert_iterator > { typedef back_insert_iterator > back_inserter_base; public: back_insert_iterator(PtrList & x) : back_inserter_base(x) {} back_insert_iterator& operator=(T* x) { back_inserter_base::operator=(x); return *this; } back_insert_iterator& operator*(){ return *this; } back_insert_iterator& operator++(){ return *this; } back_insert_iterator operator++(int){ return *this; } }; template class front_insert_iterator > : private front_insert_iterator > { typedef front_insert_iterator > front_inserter_base; public: front_insert_iterator(PtrList & x) : front_inserter_base(x) {} front_insert_iterator& operator=(T* x) { front_inserter_base::operator=(x); return *this; } front_insert_iterator& operator*(){ return *this; } front_insert_iterator& operator++(){ return *this; } front_insert_iterator operator++(int){ return *this; } };