[Issue XXX] ToBeFiled: rules for assigning to complex types are too strict

Bill Baxter wbaxter at gmail.com
Sat Dec 16 09:39:19 PST 2006


[I'll file this for real once Bugzilla is back]

//You can assign ints and floats and doubles to a double with no
//problem.  Even arrays work.
void test1() {
     // All ok
     double a = 0;
     double b = 0.0;
     double c = 0.0f;
     double[] d = [0];
     double[] e = [0.0];
     double[] f = [0.0f];
}

//But there's very little that can be assigned to a cdouble:
void test2()
{
     // All errors
     cdouble a = 0;
     cdouble b = 0i;
     cdouble c = 0.0;
     cdouble d = 0.0f;
     cdouble e = 0.0fi;
     cdouble[] f = [0];
}

//Yet, it is ok to add many things to a cdouble.
void test3()
{
     // All ok:
     cdouble a = 0+0i;
     cdouble b = a + 0;
     cdouble c = a + 0i;
     cdouble d = a + 0.0;
     cdouble e = a + 0.0f;
     cdouble f = a + 0.0fi;
}


I don't see any good reason for this strictness.  I suspsect nobody's 
complained simply because few current users actually touch complex types.

Real world impact:
In writing a generic BLAS/LAPACK-backed nd-array class I find that many 
of my generic test cases have to contain sillyness like:
         T z = cast(T)0;
         A = [[z+ 5, z+ 1, z+ 2],
              [z+ 3, z+ 4, z+ 5],
              [z+ 6, z+ 7, z+ 8]];
         x =  [z+ 1, z+ 2, z+ 3];
         b = mult(A,x);

just to handle complex types without generating compiler errors.


More information about the Digitalmars-d-bugs mailing list