Has someone encountered similar issues with -cov?
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Sat Jul 2 07:03:29 PDT 2016
On 07/02/2016 09:23 AM, Johan Engelen wrote:
> On Saturday, 2 July 2016 at 12:26:34 UTC, Andrei Alexandrescu wrote:
>>
>> How would you reshape this?
>
> Maybe:
>
> U opCast(U, T)(T payload)
> {
> import std.traits;
>
> enum descriptiveName = !isUnsigned!T && isUnsigned!U && T.sizeof <=
> U.sizeof;
> enum unsT_sigU = isUnsigned!T && !isUnsigned!U;
> static if (unsT_sigU)
> {
> static assert(U.sizeof <= T.sizeof);
> }
>
> if (!descriptiveName || payload >= 0)
> {
> auto result = cast(U) payload;
> if (result == payload)
> {
> if (!unsT_sigU || result >= 0)
> {
> return result;
> }
> }
> }
>
> return hook!U(payload);
> }
Nice, thanks. I've tried to not rely too much on mixing statically-known
and dynamically-known Boolean expressions. Can I safely assume that all
compilers will generate good code for such? According to asm.dlang.org,
dmd generates identical code at least for the two functions above. -- Andrei
More information about the Digitalmars-d
mailing list