On Thu, 18 Jan 2007, Manuel López-Ibáñez wrote: | On 18/01/07, Gabriel Dos Reis <[EMAIL PROTECTED]> wrote: | > On Thu, 18 Jan 2007, Manuel López-Ibáñez wrote: | > | > | Does that apply also to: | > | | > | unsigned int y = -10; | > | > Yes. | > | | Then, why Wconversion has warned about it at least since | http://gcc.gnu.org/onlinedocs/gcc-3.0.4/gcc_3.html#SEC11 ?
The description on the page there is: Warn if a prototype causes a type conversion that is different from what would happen to the same argument in the absence of a prototype. This includes conversions of fixed point to floating and vice versa, and conversions changing the width or signedness of a fixed point argument except when the same as the default promotion. Also, warn if a negative integer constant expression is implicitly converted to an unsigned type. For example, warn about the assignment x = -1 if x is unsigned. But do not warn about explicit casts like (unsigned) -1. As the PR you noted, it wasn't part of C++. [...] | And my favourite, Gabriel dos Reis willing to implement a warning for ^ Please use capital "D" if you must write my full name; thanks. | int->unsigned int for g++: | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=26167#c3 | | :-) I hope you understand why I think the issue is not as clear to me | as it seems to be for you. You never re-evaluate based on data collected from experimenting with applications out there? Look at the code at issue in libstdc++. What is wrong with it? As noted by Joe, such constructs are now likely common place, as they fall from STL-style view of sequences. You have to take that into account. | Finally, why libstdc++ is using Wconversion at all? Please go and read the PR submitted by Gerald. | I don't think it | is to get warnings about adding prototypes to code, because those | don't appear in C++, so it can only be to get a warning about unsigned | int y = -10, since that is the only other documented thing that | Wconversion did up to GCC 4.3 (which is not even in stage2). | | I am still confused, sorry. I see you're confused :-). I don't believe in the "only" part of your reasoning. One use of -Wconversion is to draw attention to int x = 2.3; // warning: be careful, is this what you want? // this is a potential bug as it is value altering. and in an upcoming revision to C++, it is very likely that implicit conversion that may lose information are just banned outright, see http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2006/n2100.pdf section "7.1 Can we ban narrowing for T{v}?" on page 27, which was welcomed at the last C++ committee meeting (at my own surprise, I must confess, as the committee tends to be conservative). I suggest to move "int -> unsigned" into a separate category, out of -Wconversion, if you must keep it. -- Gaby