The function constructs an object of member type
value_type (an alias of
allocator's template parameter) using its copy constructor to initialize its value to a copy of
val, as if the following code was used:
new ((void*)p) value_type (val);
The function constructs an object of type
U in-place by forwarding its arguments to the appropriate constructor, as if the following code was used:
::new ((void*)p) U (forward<Args>(args)...);