Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 13 Jul 2003 12:23:52 -0600 (MDT)
From:      "M. Warner Losh" <imp@bsdimp.com>
To:        jilles@stack.nl
Cc:        freebsd-current@freebsd.org
Subject:   Re: GCC 3.3.1, new warnings with <limits>
Message-ID:  <20030713.122352.22176834.imp@bsdimp.com>
In-Reply-To: <20030713152154.GA96653@stack.nl>
References:  <20030713000559.28c18be6.kabaev@mail.ru> <20030713044331.GA89785@crodrigues.org> <20030713152154.GA96653@stack.nl>

next in thread | previous in thread | raw e-mail | index | archive | help
: >     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).

(unsigned int) -1 == 0xffffffff	  (assuming 32-bit int).

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.

Warner



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030713.122352.22176834.imp>