Хранение данных должно быть эффективным - без лишних данных о других данных (то есть класс и т.д. для примитива - отметаем) и без пустот, а тут чисто проблема variant/union
Хранение данных не должно приводить к фрагментации.
Это снова что-то странное: если мы создаем экземпляры аллокаторов со своими функциями (их число определено), разве не нужно писать для их экземпляров аллокатор, чтобы при множестве типов уметь быстро убирать экземпляр под неиспользуемый тип и при этом избежать дыр?