On Fri, Nov 21, 2014 at 03:36:01PM +0000, Don via Digitalmars-d wrote: [...] > Suppose D had a type 'natint', which could hold natural numbers in > the range 0..uint.max. Sounds like 'uint', right? People make the > mistake of thinking that is what uint is. But it is not. > > How would natint behave, in the type system? > > typeof (natint - natint) == int NOT natint !!!
Wrong. (uint.max - 0) == uint.max, which is of type uint. If you interpret it as int, you get a negative number, which is wrong. So your proposal breaks uint in even worse ways, in that now subtracting a smaller number from a larger number may overflow, whereas it wouldn't before. So that fixes nothing, you're just shifting the problem somewhere else. T -- Too many people have open minds but closed eyes.