This is a reduced version of some code that I've been working on: void main() { } version(unittest) template symsToStrs(fields...) { static if(fields.length == 0) enum symsToStrs = ["hello"]; else enum symsToStrs = ["world"]; } Note that if you compile it with warnings enabled, you get something like q.d(9): Warning: else is dangling, add { } after condition at q.d(5) However, if you remove the version(unittest) from in front of the template, then the warning goes away. Whether the code is compiled with -unittest doesn't matter. But regardless, there is no dangling else here. So, the warning is incorrect. This issue looks similar to issue# 15326, but the code in that one doesn't have this problem anymore, so it doesn't look like this is a regression of that bug, though its cause may be similar.
Pull: https://github.com/dlang/dmd/pull/6118
Commits pushed to master at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/183114aca570878105cda76290f87340f925ccf6 Fix issue 16340 - Invalid dangling else warning triggered within template Using `parseBlock` when parsing the template body is DRY-er and remove this invalid warning. https://github.com/dlang/dmd/commit/19479267a6bfac89d270ae13a5c8ae1daf09a5b4 Merge pull request #6118 from mathias-lang-sociomantic/fix-16340 Fix issue 16340 - Invalid dangling else warning triggered within template
Commits pushed to stable at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/183114aca570878105cda76290f87340f925ccf6 Fix issue 16340 - Invalid dangling else warning triggered within template https://github.com/dlang/dmd/commit/19479267a6bfac89d270ae13a5c8ae1daf09a5b4 Merge pull request #6118 from mathias-lang-sociomantic/fix-16340