On Mon, 06 Jul 2009 03:13:45 -0700, Walter Bright wrote: > Derek Parnell wrote: >> On Mon, 06 Jul 2009 00:11:26 -0700, Walter Bright wrote: >> >>> Derek Parnell wrote: >>>> I'm struggling to see why the compiler cannot just disallow any >>>> signed<->unsigned implicit conversion? Is it a matter of backward >>>> compatibility again? >>> What's the signed-ness of 5? >> >> Positive. A positive number can be assigned to an 'int' if there is no size >> issue. > > It can also be an unsigned.
Which is a positive value, right? Can you think of any unsigned value which is also negative? >> What's the problem that I'm obviously missing? >> >>> When you index a pointer, is the index signed or unsigned? >> >> An index can be either. What's the problem here? > > auto x = p1 - p2; > > What's the type of x? Is that what you meant by "index a pointer"? Anyhow, it is a signed value. The difference between any two random memory addresses can be positive or negative. Whatever the 'signedness' of 'x' is, the expression "p2 + x == p1" must be true. If p1 is 0 and p2 is uint.max then 'x' must still be able to hold (-uint.max) > Denis Koroskin wrote: >>> auto x = p1 - p2; >>> >>> What's the type of x? >> >> ptrdiff_t, signed counterpart of size_t > > Do you really want an error if you go: > > size_t y = p1 - p2; Yes I do. size_t y = cast(size_t)p1 - p2; -- No error. ptrdiff_t y = p1 - p2; -- No error. size_t y = p1 - p2; -- Error. Safety is supposed to be enhance by using D, is it not? -- Derek Parnell Melbourne, Australia skype: derek.j.parnell
