[Issue 9506] When using alias this, writeln modifies its argument

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Feb 8 00:28:11 PST 2014


https://d.puremagic.com/issues/show_bug.cgi?id=9506



--- Comment #11 from Peter Alexander <peter.alexander.au at gmail.com> 2014-02-08 00:28:05 PST ---
(In reply to comment #10)
> (In reply to comment #9)
> > (In reply to comment #8)
> > > Eh, shouldn't it just call t.toString() without even needing to look at alias
> > > this? I'm leaning toward either phobos bug or template
> > > specialization/constraint change.
> > 
> > Due to the alias this, the class is a range, so it calls the range version of
> > writeln.
> 
> Since a recent compiler enhancement it is easy to extract 'alias this'
> information from an aggregate. writeln() should do the sane thing and check
> this before attempting to consume the range. This might be special behavior,
> but writeln() should IMHO not have side-effects.

writeln *must* have side-effects to work with input ranges. How do you consume
a one-pass input without modifying it?

Alias this isn't the problem. Any reference type range will be consumed.

auto a = inputRangeObject([1, 2, 3]);
writeln(a); // [1, 2, 3]
writeln(a); // []

If you don't want it to be consumed, you need to call .save

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list