"Steven Schveighoffer" <schvei...@yahoo.com> wrote in message news:op.vybq4xkkeav7ka@localhost.localdomain... > On Fri, 08 Jul 2011 18:45:58 -0400, Andrej Mitrovic > <andrej.mitrov...@gmail.com> wrote: > >> This is just an observation, not a question or anything. >> >> void main() >> { >> enum width = 100; >> double step = 1 / width; >> >> writeln(step); // 0 >> } >> >> I've just had this bug in my code. I forgot to make either width or 1 >> a floating-point type. IOW, I didn't do this: >> >> void main() >> { >> enum width = 100.0; >> double step = 1 / width; // or .1 >> >> writeln(step); // now 0.01 >> } >> >> This seems like a very easy mistake to make. But I know the compiler >> is probably powerless to do anything about it. It has an expression >> resulting in an int at the RHS, and it can easily cast this to a >> double since there's no obvious loss of precision when casting >> int->double. > > BTW, this is definitely not something the compiler can determine. You may > actually *want* to have integer division then convert to a double. > > So a lint tool would be perfect for this -- it cannot be an error, and > warnings don't exist in D. >
Yea they do: dmd -wi