On Tuesday, 18 June 2013 at 10:16:02 UTC, Joseph Rushton Wakeling wrote: > std.range.Take uses this constructor: > > this(R input) { _original = input; _current = input.save; } It shouldn't. It is the caller who should chose to (or not to) save.