On Wednesday, 25 August 2021 at 11:04:35 UTC, Steven
Schveighoffer wrote:
It never has called `save`. It makes a copy, which is almost
always the equivalent `save` implementation.
-Steve
Really?
Then what is the use for .save method then?
The only reason I can find is that you can't declare constructors
in interfaces hence the use of the .save method instead of copy
constructor for defining forward ranges.
We have now two ways of doing the same thing, which can cause
confusion. Best would be then for ranges to hide copy constructor
under private modifier (or disable altoghether), and force other
range wrappers call .save always, including foreach since by not
doing so we introduce difference in behavior between ref and
value forward ranges (for foreach use).