https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110102
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- In both examples we do still use allocator_traits::construct to initialize the elements, which is what matters for correct behaviour of sensible programs. For the first one we call construct(A*, int&&) and for the second one we call construct(Widget*, int&, const Widget::allocator_type&) and so the scoped allocator is still used correctly for the elements.