On Thursday, October 24, 2013 21:09:25 deadalnix wrote: > range.map!(a => new Aboject(a)) > > And here you go. The delegate passed is pure.
If you don't care about each call to front returning a completely new object, then that works, but it pretty much violates the idea that front is supposed to be emulating a member variable. front should be logically const and logically pure because those are the semantics of reading a member variable. And as front is generally treated just like member variable (including getting called multiple times between calls to popFront), doing anything with front that does not work when multiple calls to front are made between calls to popFront is going to be buggy. Now, it's a good idea to try and minimize the number of calls to front inside a function in case the cost is higher than would be desirable (e.g. if map's lambda is not cheap), but the semantics of front are expected to be essentially those of a member variable, and that means that it's very precarious if multiple calls to front do not return the exact same object or if they have any side effects. - Jonathan M Davis
