On Thu, 05 Feb 2009 06:55:46 -0500, Alex Burton <alex...@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; }

Reply via email to