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

d-bugmail at puremagic.com d-bugmail at puremagic.com
Sat Feb 8 11:03:22 PST 2014


--- Comment #13 from Peter Alexander <peter.alexander.au at gmail.com> 2014-02-08 11:03:12 PST ---
Hmm, I've been looking into this more, and it appears the behaviour may never
be stable across releases.

Consider this:

class A
    int[] a = [1, 2, 3];
    alias a this;

void main()
    auto a = new A();

void foo(R)(R r)

All is fine here. R = A will be deduced, and foo will consume the range as I
have explained.

Now, suppose a specialisation/overload is added for foo:

void foo(int[] r)

Shouldn't change anything right? It does the same thing as the original foo,
just with a more specific parameter type.

The problem is now the array is passed in directly by value, which means the
range is saved. foo(int[]) is more specialised than foo(R) so the implicit
conversion happens and the copy is made. Now, the range will not be consumed.

In summary, if you have a class that uses alias this on a value type range then
you cannot be sure if the range will be consumed or not: it depends what
overloads and specialisations exist :-(

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