Requirements on types
• ForwardIterator is a model of Forward Iterator. 
• ForwardIterator is mutable.
• Generator is a model of Generator.
• Generator's result type is convertible to ForwardIterator's value type.
• [first, last) is a valid range.
Linear. Exactly last – first invocations of gen.