Аллокатор для std контейнеров обязан быть шаблонным? Он не может принимать и возвращать просто void*?
Можно сделать обертку, которая из void сделает шаблон. Вроде так и сделано в аллокаторах нового типа.
То есть аллокатор делится на 2 части - низкоуровневая, которая возвращает void и высокоуровневая, которая инициализирует значение соответствующего типа