Your comparison with D neglects a few points in D's favor (and surely some in Nim's favor too...) that I think deserve mention, namely that D supports the equivalent of template template parameters and that D templates are templated over scoped code blocks, and that the class/function template divide of C++ is emulated in D with a shorthand (eponymous templates) but that the full code block introduces a new scope, which can be very useful. I tried to explain that [here](https://forum.nim-lang.org/t/5006) but I failed badly.
That said, I still prefer Nim.