When a (sub)object of a non-array type 
U is specified to have
  an initial value of 
v, or 
U(l...),
  where 
l... is a list of constructor arguments,
  
allocate_shared shall initialize this (sub)object
  via the expression
  
- allocator_traits<A2>::construct(a2, pv, v) or
- allocator_traits<A2>::construct(a2, pv, l...)
  respectively,
  where 
pv points to storage
  suitable to hold an object of type 
U and
  
a2 of type 
A2 is a rebound copy of
  the allocator 
a passed to 
allocate_shared
  such that its 
value_type is 
remove_cv_t<U>.