Pop Quiz what is wrong with this code?

Steven Schveighoffer schveiguy at gmail.com
Mon Jun 22 12:42:26 UTC 2020


On 6/20/20 11:22 PM, Danni Coy wrote:
> 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.

>> 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 entire conversation is incorrect -- there is no promotion to 
unsigned happening.

What is the bug with size_t implicitly casting to float? I would think 
it would work.

-Steve


More information about the Digitalmars-d mailing list