Walter Bright Wrote: > On 6/7/2011 9:01 AM, foobar wrote: > > Also ML has only two types: integers and floating point. > > That changes everything. C has 11 integer types and 3 floating point types, > which makes it ugly (and surprisingly buggy) to be forced to explicitly cast > when doing mixed type expressions.
Personally I think that all those types are redundant but regardless I don't think that int -> long is the same as int -> double. you can leave the size promotion rules untouched (implicit) since it's equivalent to upcasting. integral -> floating can however cause loss of precision and hence should be IMO explicit. E.g. in pseudo D: auto add (a, b) { return a + b; } int a = ...; long b = ...; auto c = add (a, b); // type for both parameters and return type is long double d = ...; auto e = add (a, d); // IMO, compile time error