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.
Remarks: The storage for the array
is obtained by calling ::operatornew ([new.delete]),
but it is unspecified when or how often this
function is called.
This function starts the lifetime of the array object,
but not that of any of the array elements.
If p is memory that was obtained by a call to allocate_at_least,
let ret be the value returned and
req be the value passed as the first argument to that call.
p is equal to ret.ptr and
n is a value such that req ≤ n ≤ ret.count.