On Tuesday, March 06, 2018 10:47:36 H. S. Teoh via Digitalmars-d-announce wrote: > On Tue, Mar 06, 2018 at 01:31:39PM -0500, Steven Schveighoffer via Digitalmars-d-announce wrote: > > On 3/6/18 10:39 AM, Jonathan M Davis wrote: > > > Yeah. If you're dealing with generic code rather than a specific > > > range type that you know is implicitly saved when copied, you have > > > to use save so often that it's painful, and almost no one does it. > > > e.g. > > > > > > equal(lhs.save, rhs.save) > > > > > > or > > > > > > immutable result = range.save.startsWith(needle.save); > > > > Yep. The most frustrating thing about .save to me is that .save is > > nearly always implemented as: > > > > auto save() { return this; } > > > > This just screams "I really meant just copying". > > Yeah, and also: > > auto save() { > auto copy = this; > copy.blah = blah.dup; > return this; > } > > Which just screams "I'm really just a postblit in disguise".
That's exactly what it is. It's a postblit constructor that you have to call manually and which works for classes and dynamic arrays in addition to structs. - Jonathan M Davis