property/opAddAssign problem

Steven Schveighoffer schveiguy at yahoo.com
Tue Dec 29 06:12:15 PST 2009


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;

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


More information about the Digitalmars-d-learn mailing list