From: Jonathan Wakely Date: Wed, 19 Feb 2020 12:14:54 +0000 (+0000) Subject: libstdc++: uninitialized_construct_using_allocator should use construct_at (LWG 3321) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=5f3641d0c430523d839298a6876f907523811485;p=gcc.git libstdc++: uninitialized_construct_using_allocator should use construct_at (LWG 3321) * include/std/memory (uninitialized_construct_using_allocator): Use std::construct_at (LWG 3321). --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index eb83c632adc..5408a89c7fb 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,8 @@ 2020-02-19 Jonathan Wakely + * include/std/memory (uninitialized_construct_using_allocator): Use + std::construct_at (LWG 3321). + * include/std/memory_resource (polymorphic_allocator::allocate_bytes) (polymorphic_allocator::allocate_object) (polymorphic_allocator::new_object): Add nodiscard attribute (LWG3304). diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory index 14aedb70dac..aaee6e42c1a 100644 --- a/libstdc++-v3/include/std/memory +++ b/libstdc++-v3/include/std/memory @@ -387,9 +387,10 @@ get_pointer_safety() noexcept { return pointer_safety::relaxed; } uninitialized_construct_using_allocator(_Tp* __p, const _Alloc& __a, _Args&&... __args) { - void* __vp = const_cast(static_cast(__p)); - return ::new(__vp) _Tp(std::make_obj_using_allocator<_Tp>(__a, - std::forward<_Args>(__args)...)); + return std::apply([&](auto&&... __xs) { + return std::construct_at(__p, std::forward(__xs)...); + }, std::uses_allocator_construction_args<_Tp>(__a, + std::forward<_Args>(__args)...)); } // @}