Use new __traits(isZeroInit) to check for a null initializer at compile time instead of runtime

This commit is contained in:
Nathan Sashihara
2018-10-19 02:20:13 -04:00
parent 3b5709821a
commit 4e8c9bd28f
2 changed files with 20 additions and 5 deletions

View File

@ -185,8 +185,16 @@ out(result; memory.ptr is result)
}
else
{
static const T init = T.init;
trustedCopy(init);
static if (__VERSION__ >= 2083 // __traits(isZeroInit) available.
&& __traits(isZeroInit, T))
{
(() @trusted => memory.ptr[0 .. T.sizeof])().fill!0;
}
else
{
static immutable T init = T.init;
trustedCopy(init);
}
}
result.__ctor(args);
}