2008/12/31 Don <[email protected]>: > Weed wrote: >> >> Frits van Bommel пишет: >>> >>> Don wrote: >>>> >>>> Frits van Bommel wrote: >>>>> >>>>> Don wrote: >>>>>> >>>>>> A straightforward first step would be to state in the spec that "the >>>>>> compiler is entitled to assume that X+=Y yields the same result as >>>>>> X=X+Y" >>>>> >>>>> That doesn't hold for reference types, does it? >>>> >>>> I thought it does? Got any counter examples? >>> >>> For any class type, with += modifying the object and + returning a new >>> one: >> >> The += operator too should return the object (usually "this") > > ALWAYS 'this'. It's another feature of operator overloading which is > redundant.
In D1 I always return void for += in structs because you can't return "this" by reference, and the compiler doesn't seem to consider it an error to modify the result in a way that has no side effects. So I just consider it too error prone to have += return anything. Better to get a compiler error when you try to do something cute like y = 2 + (x+=3). In D2 with ref returns the situation might be different. But I basically never find myself needing a return value from +=. --bb
