С++ 11 предоставляет класс std::allocator_traits как стандартный способ использования распределителей. Статическая функция std::allocator_traits::construct() принимает указатель на то, где должен строиться объект. Статическая функция std::allocator_traits::allocate(), однако, возвращает значение allocator::pointer, которое должно вести себя как указатель, но оно не обязательно одно (в общем случае, хотя std::allocator::pointer требуется, чтобы указатель).
Как предполагается использовать статические методы распределения и построения, если, в общем, они будут работать с несовместимыми типами? Могут ли они использоваться, только если тип pointer фактически конвертируется в обычный обычный указатель?