-Wconversion versus libstdc++
Richard Guenther
richard.guenther@gmail.com
Wed Jan 17 22:45:00 GMT 2007
On 17 Jan 2007 16:36:04 -0600, Gabriel Dos Reis <gdr@cs.tamu.edu> wrote:
> Paolo Carlini <pcarlini@suse.de> writes:
>
> | Joe Buck wrote:
> |
> | >In the case of the containers, we are asserting/relying on the fact that
> | >the pointer difference is zero or positive. But this has become a
> | >widespread idiom: people write their own code in the STL style. If STL
> | >code now has to be fixed to silence warnings, so will a lot of user code.
> | >
> | Good point. About it, we should also take into account the recent
> | messages from Martin, pointing out that many C++ front-ends do not
> | warn for signed -> unsigned.
>
> I just built firefox (CVS) with GCC mainline. The compiler spitted
> avalanches of non-sensical warning about conversions signed ->
> unsigned may alter values, when in fact the compiler knows that
> such things cannot happen.
>
> First, let's recall that GCC supports only 2s complement targets.
>
> Second, a conversion from T to U may alter value if a round trip is
> not the identity function. That is, there exists a value t in T
> such that the assertion
>
> assert (T(U(t)) == t)
>
> fails.
I think it warns if U(t) != t in a mathematical sense (without promoting
to the same type for the comparison), so it warns as (unsigned)-1 is
not "-1".
I agree this warning is of questionable use and should be not enabled
with -Wall.
Richard.
More information about the Libstdc++
mailing list