Negating a short?
Salih Dincer
salihdb at hotmail.com
Wed Nov 6 16:25:40 UTC 2024
On Tuesday, 5 November 2024 at 17:32:00 UTC, Andy Valencia wrote:
>
> integral promotion not done for -val
>
> ```d
> I ended up with this, but is negating a short really this
> problematic, or did I miss something?
>
> static if (!__traits(isUnsigned, T)) {
> if (val < 0) {
> static if (__traits(getPointerBitmap, T)[0] <
> int.sizeof) {
> val = cast(T)(-(cast(int)val));
> } else {
> val = -val;
> }
> }
> }
>
> ```
In response to Andy and Matheus, I think implementing your own
kind might be a solution:
```d
void main()
{
Short foo = { -21 };
foo = foo * -2;
assert(foo.s == 42);
}
struct Short
{
short s;
auto opBinary(string op: "*")(int rhs)
{
auto result = s * rhs;
return Short(cast(short)result);
}
void opOpAssign(string op: "*")(int rhs)
{
s *= rhs;
}
}
```
SDB at 79
More information about the Digitalmars-d-learn
mailing list