Actually, I think %u is redundant. std.format uses compile-time introspection to do the "right thing" for %d. You can pass an unsigned number for %d and it works correctly. I just tested %u, it seems that it's just an alias for %d:
int a = -10;
writefln("%u", a); // outputs "-10"
So I think this bug is invalid.
Comment #2 by k.hara.pg — 2012-10-27T09:26:22Z
(In reply to comment #1)
> Actually, I think %u is redundant. std.format uses compile-time introspection
> to do the "right thing" for %d. You can pass an unsigned number for %d and it
> works correctly. I just tested %u, it seems that it's just an alias for %d:
>
> int a = -10;
> writefln("%u", a); // outputs "-10"
>
> So I think this bug is invalid.
Yes. And, if programmer really want to format int value as unsigned, he needs to use cast instead of %u.
writefln("%d", cast(uint)a); // outputs "4294967286"