On Sunday, July 13, 2003, at 1:23PM, M. Warner Losh wrote:
: > 134 #define __glibcpp_signed(T) ((T)(-1) < 0) : #define __glibcpp_signed(T) (!((T)(-1) > 0))
Why not the simpler:
#define __glibcpp_signed(T) ((T)(-1) <= 0)
that way we have an overlap on the range of the two types, so we won't get a warning. We know for a fact that -1 != 0 for all known machine types (all machines are two's complement, or are required to behave as if they are two's complement, per the standard).
You keep saying this... where is this "must behave as two's compliment stated?"
(unsigned int) -1 == 0xffffffff (assuming 32-bit int).
or with a valid one's compliment C99 compliant system (unsigned int) -1 = 0xfffffffe;
Correct :). I still don't think C enforces two's compliment.
even on a one's complement's machine, without the standard conversion, the 'type punning' conversion of -1 would yield 0xfffffffe, which is still > 0.
Dave
Warner
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"
_______________________________________________ [EMAIL PROTECTED] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-current To unsubscribe, send any mail to "[EMAIL PROTECTED]"