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; }