On Friday, 20 November 2015 at 18:23:57 UTC, HaraldZealot wrote:
All ranges in Phobos pass by value, but if I have output range with state like cumulative statistics this is useless.

After discussion with Dicebot I try this work-arround:
http://dpaste.dzfl.pl/8af8eb8d0007

It is unfinished. But direction is observable.

Is this good solution? And how about to include something like this tool in Phobos?

I'm not sure how useful this is as opposed to plain pointers. For structs, since `foo.bar` is the same as `(&foo).bar`, you may as well use a pointer, and the only thing it saves for numbers is a pointer deference or two.

You say ranges are pass-by-value, but that's not entirely true. Ranges themselves can be classes, or be made references via std.range.refRange. Range elements can be made lvalues by using ref functions [1].

As for the code:

* Your example usage (x = x += x = (x * 5)) is confusing, due to the chained assignments. * I wouldn't mark this struct as @safe because the passed value may leave scope, causing invalid dereferences. * There's no point in making the Reference struct a template, as the function its defined in is also a template. Just replace usages of U with T.

[1]: http://dlang.org/function.html#ref-functions see also std.range.interface.hasLvalueElements

Reply via email to