необходимо наследоваться от класса
template<class _Category,
class _Ty,
class _Diff = ptrdiff_t,
class _Pointer = _Ty *,
class _Reference = _Ty&,
class _Base_class = _Iterator_base>
struct _Iterator_with_base
: public _Base_class
{ // base type for all iterator classes
typedef _Category iterator_category;
typedef _Ty value_type;
typedef _Diff difference_type;
typedef _Diff distance_type; // retained
typedef _Pointer pointer;
typedef _Reference reference;
};
где класс категорий может быть std::forward_iterator_tag или bidirectional_iterator_tag ...
с остальным думаю разберешься.