Как показывает практика детерминированность освобождения далеко не всегда нужна. Чеще всего пофиг когда оно деструктнется, лишь бы деструктнулось не слишком поздно.
я же сбрасывал ссылку где-то выше на ди блог. Именно чистые строковые литералы - заканчиваются, именно поэтому и работает: import core.stdc.stdio : puts; void main() { puts("Hello C from D!"); } без toStringz.