What category would an iterator be that can be incremented and decremented (and in theory random access would be possible too!), but the return values can't be assigned to.
I'm writing an iterator over registry keys. The value_type of the iterator is reg_key (a class representing a registry key). I have no concrete objects to return! The objects are actually created as I go ahead. Only input iterators allow this AFAIK. Maybe not even those.
I can add a member of reg_key and return a reference to this. But this object changes. It might go invalid too soon if the caller stores a reference.