Dear all, I've decided to write an ABC named BasicIterator, from which all derived iterators are to be descended. The reason being that I have to refer to iterators inside an interface and I need a general base type as a place holder to which I can refer. Besides, I don't want to use CRTP in the interface, but I don't care if I'm forced to use it inside BasicIterator. As discussed in the interoperability section of iterator_facade (herehttp://www.boost.org/libs/iterator/doc/iterator_facade.html#interoperability), the euqal() function must be templatized. The problem is that I have to make equal() a pure virtual member function in order to force derived types override it, but templated virtual functions on the other hand, are not valid. So I was wondering what the best approach is. How can I achieve both of these goals? Please advise. Any ideas/suggestions are welcome. Thanks in advance