On Saturday, 24 March 2018 at 17:34:09 UTC, Manu wrote:
You mutate a temporary that times out at the end of the
statement...
your statement is never assigned to anything, and has no effect.
That is solved by having the ref function return its argument (so
it can be chained):
struct S;
ref S modify(return ref S s);
S(data).modify.writeln;
This rvalue pattern would be disallowed if argument `s` was
const. Why not make `modify` just return a copy then, maybe the
optimizer could remove the copy? So that you can also use it with
lvalues:
S s;
modify(s);