Is -1 > 7 ?

Dicebot public at dicebot.lv
Fri Aug 9 08:18:43 PDT 2013


On Friday, 9 August 2013 at 15:11:42 UTC, michaelc37 wrote:
> forgive me if i'm doing something stupid, i'm extremely tired 
> and trying to avoid drinking coffee.
>
> void main()
> {
> 	int[] arr = [0, 1, 2, 3, 4, 5, 6];
>
> 	//check 1
> 	if (-1 > arr.length)
> 		writefln("WTF -> %d is greater than %d ????", -1, arr.length);
> 	else
> 		writefln("GOOD -> %d is NOT greater than %d", -1, arr.length);
> }
>
> here is my output:
> WTF -> -1 is greater than 7 ????

And signed vs unsigned design issues pops up again! :) *summoning 
bearophile*

On topic: arr.length has type size_t which is unsigned integer. 
-1 gets silently casted to unsigned, resulting in size_t.max 
value (0xFFF..) - which is obviously bigger than actual length.

I believe it should be a compile-time error but, unfortunately, 
this is unlikely to happen.



More information about the Digitalmars-d-learn mailing list