On Sunday, 2 October 2016 at 14:44:13 UTC, Lodovico Giaretta
wrote:
Yeah, a property is quite different from a variable. In fact, a
property may refer to a computed value, which may not have an
address and as such cannot be modified:
[...]
So it is correct that `+=` doesn't work with properties, and
neither does the "addressof" operator `&` (it returns the
delegate). Having a getter property return by ref circumvents
this issue, but has the drawback of bypassing any check that a
setter property would do.
There is already a degree of transparency with how properties
being handled for example in allowing properties to be an lvalue
if they have a setter.
t.val = 42;
I can understand that on an implementation level it might be
simpler to interpret the 2 statements differently but it would
seem much more intuitive to me if the syntactic sugar for
properties were extended out to allow statements such as:
t.val += 1;
Where there is a getter and setter available.
To my mind at least the ideal would be for properties to act as
close as possible to member variables.
It is however good to see that it's possible to wrap functions to
provide some of this behaviour.