Except for the destructor, member functions of the default allocator shall not introduce
data races ([intro.multithread]) as a result of concurrent calls to those member
functions from different threads.
Calls to these functions that allocate or deallocate a
particular unit of storage shall occur in a single total order, and each such
deallocation call shall happen before the next allocation (if any) in this order.