| Thread overview | |||||||
|---|---|---|---|---|---|---|---|
|
December 29, 2009 property/opAddAssign problem | ||||
|---|---|---|---|---|
| ||||
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?
| ||||
December 29, 2009 Re: property/opAddAssign problem | ||||
|---|---|---|---|---|
| ||||
Posted in reply to teo | On Tue, 29 Dec 2009 09:01:38 -0500, teo <teo.ubuntu.remove@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;
-Steve
| |||
December 29, 2009 Re: property/opAddAssign problem | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Tue, 29 Dec 2009 09:10:14 -0500, Steven Schveighoffer <schveiguy@yahoo.com> wrote:
> On Tue, 29 Dec 2009 09:01:38 -0500, teo <teo.ubuntu.remove@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
| |||
December 29, 2009 Re: property/opAddAssign problem | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Tue, 29 Dec 2009 09:12:15 -0500, Steven Schveighoffer wrote: > On Tue, 29 Dec 2009 09:10:14 -0500, Steven Schveighoffer <schveiguy@yahoo.com> wrote: > >> On Tue, 29 Dec 2009 09:01:38 -0500, teo <teo.ubuntu.remove@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' | |||
December 29, 2009 Re: property/opAddAssign problem | ||||
|---|---|---|---|---|
| ||||
Posted in reply to teo | On Tue, 29 Dec 2009 13:44:18 -0500, teo <teo.ubuntu.remove@yahoo.com> wrote:
> On Tue, 29 Dec 2009 09:12:15 -0500, Steven Schveighoffer wrote:
>>
>> 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'
>
It will evenutally, probably within the next couple releases.
-Steve
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply