Pop Quiz what is wrong with this code?

Danni Coy danni.coy at gmail.com
Sun Jun 21 03:22:13 UTC 2020


On Sun, Jun 21, 2020 at 9:40 AM Avrina via Digitalmars-d
<digitalmars-d at puremagic.com> wrote:
>
> On Saturday, 20 June 2020 at 18:15:27 UTC, Steven Schveighoffer
> wrote:
> > On 6/20/20 12:00 PM, Danni Coy wrote:
> >
> >> I tried explicitly making x and y ints and I got a
> >> depreciation warning.
> >
> > foreach(ptrdiff_t y, ref row; offsetMap)
> >
> > is that what you wanted?
> >
> > ptrdiff_t is the signed version of size_t. The complaint is not
> > that you are converting from unsigned to signed, but that you
> > are converting from 64-bit to 32-bit.
> >
> > -Steve
>
> Why isn't that deprecated as well? implicitly converting from
> ulong to long is an error as much as ulong to uint.

It turns out this line is the bigger problem.

 immutable SDL_FPair offset  = { center.x - x, y - center.y };
FPair is a
struct SDL_FPair
{
    float x;
    float y;
...
if those values were ints.
dmd will not allow a downcast from ulong to int
(the compiler would have caught the issue for me)
but it will allow casting ulong to float which is why It took me a
couple of hours with a debugger
trying to find the bug.
So this turns out to be more of a corner case than I thought.
offset is a pair of floats because it's about to used in a bunch of
angle calculations and I wanted to minimise the number of casts.


More information about the Digitalmars-d mailing list