bearophile can say "i told you so" (re uint->int implicit conv)
Timon Gehr
timon.gehr at gmx.ch
Thu Mar 28 15:04:35 PDT 2013
On 03/28/2013 09:03 PM, Adam D. Ruppe wrote:
> I was working on a project earlier today that stores IP addresses in a
> database as a uint. For some reason though, some addresses were coming
> out as 0.0.0.0, despite the fact that if(ip == 0) return; in the only
> place it actually saves them (which was my first attempted quick fix for
> the bug).
>
> Turns out the problem was this:
>
> if (arg == typeid(uint)) {
> int e = va_arg!uint(_argptr);
> a = to!string(e);
> }
>
>
> See, I copy/pasted it from the int check, but didn't update the type on
> the left hand side. ...
While I agree that implicit uint <-> int is a bad situation, I think the
following practises deserve the larger part of the blame:
- Having too much redundant information in the code.
- Copypasta & edit instead of string mixins / static foreach.
Of course, sometimes there is a significant amount of temptation.
(Also, that code snippet is nowhere near the most convenient line
length. Eliminating the temporary completely is a valid option. :o))
More information about the Digitalmars-d
mailing list