Notice that this does not deallocate the storage for the element (see member deallocate to release storage space).
The function uses value_type's destructor (value_type is a member type, alias of the allocator's template parameter), as if the following code was used: p->~value_type();
The function uses U's destructor, as if the following code was used: p->~U();