On 01/22/2010 12:23 PM, Steven Schveighoffer wrote:
On Thu, 21 Jan 2010 22:44:24 -0500, Ellery Newcomer
<ellery-newco...@utulsa.edu> wrote:
according to the spec,
a op= b;
is semantically equivalent to
a = a op b;
but this doesn't seem to be strictly true. for example:
char c = 'a';
real r = 3.14;
c = c + r; // error
c += r; // accepted; seems to be doing c += floor(r);
is this behavior intentional?
There are two issues, I think recently discussed, a op= b is actually
equivalent to:
a = a op cast(typeof(a))b;
when dealing with primitives. I'm not sure if this happens with user
defined types.
And the second issue (if you want to get technical) is that a op= b is
considered a different operation than a = a op b because one can
manually optimize a op= b more than a = a op b. So technically the
seemingly analogous calls can do something different. A good example is
array appending, a ~= b is not equivalent to a = a ~ b, because the
former may allocate in place and the latter always reallocates.
-Steve
Alright, that makes sense enough, thanks.
Spec needs to be changed, though
http://d.puremagic.com/issues/show_bug.cgi?id=3735