По-хорошему там вовсе не в размере бинарника дело.
Дело в том, как С++ и D реализуют шаблоны/генерики.
template is not a function.
Шаблонная функция это еще не настоящая функция, она сама по себе ни во что не компилируется, пока компилятор не увидит ее вызов с конкретным типом. Шаблонные типы подставляются статически при компиляции и потому фиксированы, это статический полиморфизм, а тут в задаче нужен динамический, рантайм полиморфизм. Он совсем другими механизмами достигается.
Что интересно, во многих других языках генерики сделаны иначе, и там обычно нет такой проблемы.