Стандартная библиотека решает эту проблему, используя объект распределителя, тип которого установлен в качестве параметра шаблона класса, которому требуется настраиваемый алгоритм выделения.
Не думаю, что есть какой-то полный способ сделать то, что вы просили, о чем уже свидетельствует ваша вторая пуля. У компилятора нет возможности узнать, какой новый родительский оператор использовать, если они оба определили один.
Если вы пытаетесь внедрить, например, небольшой пул распределителя объектов, который выбирает подходящий размер / пул во время компиляции, как насчет использования автономной функции распределителя шаблонов: она будет называться как object_allocator<T>::allocate()
и тип шаблона позволит вам выяснить размер автоматически. Вы все еще не можете наследовать оператор new из-за проблемы множественного наследования, но это позволяет легко понять, как распределять память в любом классе.