During the review of D140653 it was suggested to use vector in
__retarget_buffer instead of manually managing the memory. Due to the
requirements of the Standard it turns out format needs to include vector
leading to a cycle. Therefore switching back to manual memory
management.
This is a preparation to fix https://llvm.org/PR61314
Why the #ifdef? __allocate_at_least was specifically designed to be able to write auto __alloc_result = std::__allocate_at_least(...). (Although, thinking about it we should just have a converting constructor from allocation_result)