Possible @property compromise

TommiT tommitissari at hotmail.com
Thu Jan 31 18:27:28 PST 2013


On Friday, 1 February 2013 at 01:53:05 UTC, TommiT wrote:
> On Friday, 1 February 2013 at 00:59:47 UTC, Zach the Mystic 
> wrote:
>> writeln(foo.n); // uses alias this to call __mightAsWellBeOpGet
>
> No it won't. It will print "n()".
>
> And that exactly (passing to a templated parameter) is the 
> insurmountable problem in using a variable to represent a 
> property.

On Friday, 1 February 2013 at 01:53:05 UTC, TommiT wrote:
> And that exactly (passing to a templated parameter) is the 
> insurmountable problem in using a variable to represent a 
> property.

And here's another example of why it is as big of a problem as I 
make it sound to be:

import std.concurrency;

struct Array
{
     int _len;

     length struct // Using Zach's syntax
     {
         @property get() { return _len; }
         alias this = get;
         void opAssign(int rhs) { _len = rhs; }
     }
}

void func(T)(T t)
{
     auto v = t;
     v = 10;
}

void main()
{
     Array arr;
     spawn(&func!int, arr.length);
     arr.length = 20; // And here we have a data-race.
                      // Good luck trying to find these
                      // kinds of bugs.
}


More information about the Digitalmars-d mailing list