On Saturday, 5 June 2021 at 01:34:06 UTC, Kyle Ingraham wrote:

It looks like you’re being caught by D’s arithmetic conversions: https://dlang.org/spec/type.html#usual-arithmetic-conversions

“If the signed type is larger than the unsigned type, the unsigned type is converted to the signed type.”

Your pint variables are ushorts but the 1 you subtract is an int literal so the result gets promoted to an int.

As I am writing code today I am encountering a lot of these situations.

cast(ushort)(this.pintBottom1 - 1)

My first walkaround for this was intuitive:

this.pintBottom1 - cast(ushort) 1 /// I didn't know if eg: 1S was possible which should have been the proper way to handle it

... since pintBottom was already defined as ushort, but it didn't work also, so I ended with cast(ushort)(this.pintBottom1 - 1). I don't understand how to write typed code in D then. What's the point of declaring, for instance ushort's if then nothing will treat them as ushort's and I have to manually cast() everything to ushort() all the time ?

Reply via email to