https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69293
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> --- Actually I think this is a defect in the standard, it is inconsistent to check is_constructible<T, inner_allocator_type> but then pass inner_allocator_type&. Consider this type: struct use_arg { using allocator_type = std::allocator<use_arg>; use_arg(allocator_type&&) { } }; The uses_allocator and is_constructible traits are both true, but scoped_allocator_adaptor::construct(pointer) will fail to compile.