summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/ext/malloc_allocator.h
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2018-10-25 15:03:13 +0200
committerMarc Glisse <glisse@gcc.gnu.org>2018-10-25 13:03:13 +0000
commit0f317ef76269a989ae751a808f946d15b740baf9 (patch)
tree9da28f80357d64a8e89cdd7f85a670e3161265a4 /libstdc++-v3/include/ext/malloc_allocator.h
parent09d3f04eaea862476be3c74fd84f06ec1afb1e68 (diff)
Relocation (= move+destroy)
2018-10-25 Marc Glisse <marc.glisse@inria.fr> PR libstdc++/87106 * include/bits/alloc_traits.h (_S_construct, _S_destroy, construct, destroy): Add noexcept specification. * include/bits/allocator.h (construct, destroy): Likewise. * include/ext/alloc_traits.h (construct, destroy): Likewise. * include/ext/malloc_allocator.h (construct, destroy): Likewise. * include/ext/new_allocator.h (construct, destroy): Likewise. * include/bits/stl_uninitialized.h (__relocate_object_a, __relocate_a, __relocate_a_1): New functions. (__is_trivially_relocatable): New class. * include/bits/stl_vector.h (__use_relocate): New static member. * include/bits/vector.tcc (reserve, _M_realloc_insert, _M_default_append): Use __relocate_a. (reserve, _M_assign_aux, _M_realloc_insert, _M_fill_insert, _M_default_append, _M_range_insert): Move _GLIBCXX_ASAN_ANNOTATE_REINIT after _Destroy. * testsuite/23_containers/vector/modifiers/push_back/49836.cc: Replace CopyConsOnlyType with DelAnyAssign. From-SVN: r265485
Diffstat (limited to 'libstdc++-v3/include/ext/malloc_allocator.h')
-rw-r--r--libstdc++-v3/include/ext/malloc_allocator.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/libstdc++-v3/include/ext/malloc_allocator.h b/libstdc++-v3/include/ext/malloc_allocator.h
index 1ae53b11ddb..5f91fe08af4 100644
--- a/libstdc++-v3/include/ext/malloc_allocator.h
+++ b/libstdc++-v3/include/ext/malloc_allocator.h
@@ -151,11 +151,15 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Up, typename... _Args>
void
construct(_Up* __p, _Args&&... __args)
+ noexcept(noexcept(::new((void *)__p)
+ _Up(std::forward<_Args>(__args)...)))
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
template<typename _Up>
void
- destroy(_Up* __p) { __p->~_Up(); }
+ destroy(_Up* __p)
+ noexcept(noexcept(__p->~_Up()))
+ { __p->~_Up(); }
#else
// _GLIBCXX_RESOLVE_LIB_DEFECTS
// 402. wrong new expression in [some_] allocator::construct