On Wednesday, 17 January 2018 at 21:12:07 UTC, Rubn wrote:
On Wednesday, 17 January 2018 at 20:30:07 UTC, rumbu wrote:
And here is why is bothering me:

auto max = isNegative ? cast(Unsigned!T)(-T.min) : cast(Unsigned!T)T.max);

The generic code above (which worked for all signed integral types T in 2.077) must be rewritten like this in 2.078:

static if (T.sizeof >= 4)
auto max = isNegative ? cast(Unsigned!T)(-T.min) : cast(Unsigned!T)T.max;
else
auto max = isNegative ? cast(Unsigned!T)(-cast(int)T.min) : cast(Unsigned!T)T.max;

Now I have to translate an 1-liner in a 4-liner all around my project.

Or write some wrapper code, which you prob should have done in the first place if you use that all around your project:

auto max = myMaxFunc!(isNegative, T);

"max" was just an over-templated example to highlight the problem, code like "m = n < 0 ? -n : n" doesn't worth a wrapper, for example.

But the original questions remain:

1. Why do I need explicitely to promote my byte to int in order to assign it to an ulong?
2.077: ulong u = -b; 2.088: ulong u = -cast(int)b;

2. Why do I need a cast(int) to assign a byte to an ubyte, since I'm explicitely cast it? 2.077: ubyte c = cast(ubyte)-b; 2.088: ubyte c = cast(ubyte)-cast(int)b




Reply via email to