It's not illegal. The mathematical result is 0, which is what is assigned to f.
Comment #3 by clugdbug — 2007-11-01T02:54:00Z
(In reply to comment #2)
> It's not illegal. The mathematical result is 0, which is what is assigned to f.
The imaginary part of the expression is indeed 0. But that involves an implicit cast from double to idouble, which is very hard to justify. The type of (1.0i * 2.0i) is double. It's not even a cdouble.
The current behaviour violates
a *= b <---> a = a*b, since the latter won't compile.
idouble *= idouble is a bug in user code, 100% of the time.
(I actually got bitten by this, when I wrote generic dot product code. You can't assume that a = a*a compiles).