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)...);