Requirements on types
• InputIterator is a model of Input Iterator.
• OutputIterator is a model of Output Iterator.
• T is EqualityComparable, and may be compared for equality with objects of InputIterator's value type.
• T is Assignable.
• T is convertible to a type in OutputIterator's set of value types.