Любая функция, которая будет встроена, должна иметь свой полный источник в файле .di.Любая функция, которая будет использоваться в CTFE, должна иметь не только полный исходный код в файле .di, но и полный источник каждой функции, которую она использует - прямо или косвенно - должна быть доступна компилятору.Кроме того, из-за того, как работают шаблоны, их полный источник также должен быть в файле .di (что аналогично тому, как шаблоны должны быть в заголовочных файлах в C ++).Итак, есть ряд случаев, когда вам нужно , что нужно , чтобы быть в файле .di.
При каких именно обстоятельствах компилятор решает удалить материал или нет, я не знаю(кроме того факта, что шаблоны автоматически заканчиваются в файлах .di полностью, потому что они имеют to).Это может измениться в зависимости от текущей реализации компилятора и его оптимизации.Но, как минимум, его придется оставить в небольших функциональных телах, если он собирается делать какие-либо встраивания.Большие функциональные тела и тела маленьких виртуальных функций (которые не могут быть встроены в любом случае), вероятно, будут удалены.Но ваш пример дает небольшую, не виртуальную функцию, поэтому dmd, вероятно, оставил ее, чтобы она могла встроить любые вызовы к ней.Если вы хотите, чтобы при создании файла .di dmd избавляло от множества проблем, вам, вероятно, понадобятся большие функции и / или классы.