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 ?