It is unusual to take references to iterator objects, as they can usually be assumed to be small. Not wrong, just unusual. The placement of the ampersand makes my brain try to parse it as a take-adress operator, though.

Thanks for replacing the T parameters with something readable, but from my reading of the diff there are more of them that should be taken at the same time if the type requirements/concepts used are really the same. (I may be wrong about this, the diff was a bit hard to read for this file).