https://issues.dlang.org/show_bug.cgi?id=15055
--- Comment #1 from Kenji Hara <[email protected]> --- This is a duplication of enhancement issue 9073. With static if and static assert, short circuit works for the logical expressions, like A && B - If A is evaluated to false at compile time, B won't be evaluated *even if B is an invalid expression*. On the other hand, an initializer expression on enum variable declaration does not work as so. With A && B, B is evaluated *always* and will make error if it's not correct. In old days, I've opened a PR to fix 9073, but was rejected by Walter. https://github.com/D-Programming-Language/dmd/pull/2559 To do what you expect, the template should be rewritten to: template sameUnqualArrays(A, B) { //enum bool sameUnqualArrays = isArray!A && isArray!B && // is(Unqual!(ForeachType!A) == Unqual!(ForeachType!B)); static if (isArray!A && isArray!B && is(Unqual!(ForeachType!A) == Unqual!(ForeachType!B))) { enum bool sameUnqualArrays = true; } else enum bool sameUnqualArrays = false; } --
