property/opAddAssign problem
teo
teo.ubuntu.remove at yahoo.com
Tue Dec 29 10:44:18 PST 2009
On Tue, 29 Dec 2009 09:12:15 -0500, Steven Schveighoffer wrote:
> On Tue, 29 Dec 2009 09:10:14 -0500, Steven Schveighoffer
> <schveiguy at yahoo.com> wrote:
>
>> On Tue, 29 Dec 2009 09:01:38 -0500, teo <teo.ubuntu.remove at yahoo.com>
>> wrote:
>>
>>> Consider following:
>>>
>>> class A
>>> {
>>> int m;
>>> void opAddAssign(int n) { m += n; }
>>> }
>>>
>>> class B
>>> {
>>> A a;
>>> this() { a = new A; }
>>> A Prop() { return a; }
>>> }
>>>
>>> void main()
>>> {
>>> B b = new B;
>>> b.Prop += 3;
>>> }
>>>
>>> I get a compilation error (dmd v2.037):
>>>
>>> test.d(17): Error: 'b.Prop' is not a scalar, it is a A() test.d(17):
>>> Error: incompatible types for ((b.Prop) += (3)): 'A()' and 'int'
>>>
>>> Am I doing something wrong, or is this a known issue with opAddAssign
>>> and/
>>> or properties?
>>
>> This is part of the issue with properties that will be fixed with the
>> @property annotation.
>>
>> try
>>
>> b.Prop() += 3;
Thanks. This trick works, but it looks a bit weird.
>
> Eventually, marking Prop as a @property should also work (haven't tested
> it, it may work now):
>
> @property A Prop() { return a; }
>
> ...
>
> b.Prop += 3; // compiles
>
> -Steve
Unfortunately it doesn't:
test.d(17): Error: 'b.Prop' is not a scalar, it is a @property A()
test.d(17): Error: incompatible types for ((b.Prop) += (3)): '@property A
()' and 'int'
More information about the Digitalmars-d-learn
mailing list