Insert a newly created allocator_traits<ALLOCATOR>::value_type object, constructed by forwarding the specified allocator (if required) and the specified (variable number of) arguments to the corresponding constructor of allocator_traits<ALLOCATOR>::value_type, into the array at the specified toBegin location, shifting forward the elements from toBegin to the specified toEnd location by one position. If an exception is thrown during the in-place construction of the new object, the elements in the range [toBegin .. toEnd)] are unaffected; otherwise, if a (copy or move) constructor or a (copy or move) assignment operator throws an exception, then any elements created after toEnd are destroyed and the elements in the range [toBegin .. toEnd )] are left in a valid but unspecified state. The behavior is undefined unless toBegin refers to sufficient space to hold at least toEnd - toBegin + 1 elements.
Declared in <bslalg_arrayprimitives.h>
template<
class ALLOCATOR,
class... ARGS>
static
void
emplace(
bsl::allocator_traits<ALLOCATOR>::pointer toBegin,
bsl::allocator_traits<ALLOCATOR>::pointer toEnd,
ALLOCATOR allocator,
ARGS&&... arguments);