property syntax problems

Robert Jacques sandford at jhu.edu
Thu Feb 5 09:34:28 PST 2009


On Thu, 05 Feb 2009 06:55:46 -0500, Alex Burton <alexibu at mac.com> wrote:

> Hi,
>
> I just found a bug that comes out of the property syntax.
>
> The property syntax is great in that it allows a smooth transition from  
> simple code dealing with public member variables to the use of  
> interfaces without needing to update the client code.
> i.e. A.bob = 1 can stay as A.bob = 1 when bob changes from being an int  
> to being void A::bob(int i)
> instead of changing to A.bob(1).
>
> But this can introduce the bug I show below.
>
> Proposal :
> If the temporary returned by the property syntax getter function is  
> modified, then the corresponding setter function needs to be called with  
> the temporary as argument.
>
> struct A
> {
>       int i;
>       int j;
> };
>
> class B
> {
>   A mA;
> public:
> 	A a() { return mA; }
> 	void a(Atom a) { mA = a; }
> };
>
>
> int main()
> {
>      B b;
>      b.a.j = 10;     // error b.a is a temporary.
> }

This isn't a bug, it's a feature. What you wanted to use were ref returns  
(see http://www.digitalmars.com/d/2.0/function.html )
ref A a() { return mA; }



More information about the Digitalmars-d mailing list