property syntax problems

Bill Baxter wbaxter at gmail.com
Thu Feb 5 11:27:27 PST 2009


On Fri, Feb 6, 2009 at 2:34 AM, Robert Jacques <sandford at jhu.edu> wrote:
> 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; }

You could call it a bug that the compiler doesn't warn about the
modification of a temporary like that in a way that has no side
effects.  Or maybe it does warn about it if you enable warnings?

--bb



More information about the Digitalmars-d mailing list