Проблема с шаблонами такова, что действительно хорошо их сделать в языке крайне непросто. И если это не учитывалось в языке как центральная концепция с самого начала, то скорее всего, это будет корявой нашлёпкой.

Также, достаточно гиблое дело пытаться соревноваться с гибкостью динамического подхода с помощью параметризуемых, но статических типов. Для желаемого контроля над типами идругимихарактеристиками используемых элементов, можно применять специальные проверщики, которые должны быть предусмотрены в обобщённом хранилище.