[libc++] Fix insert() calling incorrect constructors (#146231)
This fixes `insert()` calling the wrong `allocator_traits::construct` in the associative containers by removing the special handling that lead to the inconsistencty inside `__tree` and `__hash_table`.
This commit is contained in:
parent
9052977c35
commit
afcf76bda1
@ -852,15 +852,6 @@ public:
|
||||
template <class... _Args>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __emplace_hint_multi(const_iterator __p, _Args&&... __args);
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __insert_unique(__container_value_type&& __x) {
|
||||
return __emplace_unique_key_args(_NodeTypes::__get_key(__x), std::move(__x));
|
||||
}
|
||||
|
||||
template <class _Pp, __enable_if_t<!is_same<__remove_cvref_t<_Pp>, __container_value_type>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __insert_unique(_Pp&& __x) {
|
||||
return __emplace_unique(std::forward<_Pp>(__x));
|
||||
}
|
||||
|
||||
template <class _ValueT = _Tp, __enable_if_t<__is_hash_value_type<_ValueT>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI void __insert_unique_from_orphaned_node(value_type&& __value) {
|
||||
using __key_type = typename _NodeTypes::key_type;
|
||||
@ -877,16 +868,6 @@ public:
|
||||
__h.release();
|
||||
}
|
||||
|
||||
template <class _Pp>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __insert_multi(_Pp&& __x) {
|
||||
return __emplace_multi(std::forward<_Pp>(__x));
|
||||
}
|
||||
|
||||
template <class _Pp>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __insert_multi(const_iterator __p, _Pp&& __x) {
|
||||
return __emplace_hint_multi(__p, std::forward<_Pp>(__x));
|
||||
}
|
||||
|
||||
template <class _ValueT = _Tp, __enable_if_t<__is_hash_value_type<_ValueT>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI void __insert_multi_from_orphaned_node(value_type&& __value) {
|
||||
using __key_type = typename _NodeTypes::key_type;
|
||||
@ -903,10 +884,6 @@ public:
|
||||
__h.release();
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __insert_unique(const __container_value_type& __x) {
|
||||
return __emplace_unique_key_args(_NodeTypes::__get_key(__x), __x);
|
||||
}
|
||||
|
||||
#if _LIBCPP_STD_VER >= 17
|
||||
template <class _NodeHandle, class _InsertReturnType>
|
||||
_LIBCPP_HIDE_FROM_ABI _InsertReturnType __node_handle_insert_unique(_NodeHandle&& __nh);
|
||||
@ -1336,7 +1313,7 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_unique(_InputIterator __
|
||||
__deallocate_node(__cache);
|
||||
}
|
||||
for (; __first != __last; ++__first)
|
||||
__insert_unique(*__first);
|
||||
__emplace_unique(*__first);
|
||||
}
|
||||
|
||||
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
||||
@ -1368,7 +1345,7 @@ void __hash_table<_Tp, _Hash, _Equal, _Alloc>::__assign_multi(_InputIterator __f
|
||||
__deallocate_node(__cache);
|
||||
}
|
||||
for (; __first != __last; ++__first)
|
||||
__insert_multi(_NodeTypes::__get_value(*__first));
|
||||
__emplace_multi(_NodeTypes::__get_value(*__first));
|
||||
}
|
||||
|
||||
template <class _Tp, class _Hash, class _Equal, class _Alloc>
|
||||
|
||||
@ -1015,32 +1015,6 @@ public:
|
||||
return __emplace_hint_unique_key_args(__p, __x.first, std::forward<_Pp>(__x)).first;
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __insert_unique(const value_type& __v) {
|
||||
return __emplace_unique_key_args(__v, __v);
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __insert_unique(const_iterator __p, const value_type& __v) {
|
||||
return __emplace_hint_unique_key_args(__p, __v, __v).first;
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __insert_unique(value_type&& __v) {
|
||||
return __emplace_unique_key_args(__v, std::move(__v));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __insert_unique(const_iterator __p, value_type&& __v) {
|
||||
return __emplace_hint_unique_key_args(__p, __v, std::move(__v)).first;
|
||||
}
|
||||
|
||||
template <class _Vp, __enable_if_t<!is_same<__remove_const_ref_t<_Vp>, value_type>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> __insert_unique(_Vp&& __v) {
|
||||
return __emplace_unique(std::forward<_Vp>(__v));
|
||||
}
|
||||
|
||||
template <class _Vp, __enable_if_t<!is_same<__remove_const_ref_t<_Vp>, value_type>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __insert_unique(const_iterator __p, _Vp&& __v) {
|
||||
return __emplace_hint_unique(__p, std::forward<_Vp>(__v));
|
||||
}
|
||||
|
||||
template <class _ValueT = _Tp, __enable_if_t<__is_tree_value_type<_ValueT>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI void
|
||||
__insert_unique_from_orphaned_node(const_iterator __p, __get_node_value_type_t<_Tp>&& __value) {
|
||||
@ -1052,22 +1026,6 @@ public:
|
||||
__emplace_hint_unique(__p, std::move(__value));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __insert_multi(value_type&& __v) { return __emplace_multi(std::move(__v)); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __insert_multi(const_iterator __p, value_type&& __v) {
|
||||
return __emplace_hint_multi(__p, std::move(__v));
|
||||
}
|
||||
|
||||
template <class _Vp>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __insert_multi(_Vp&& __v) {
|
||||
return __emplace_multi(std::forward<_Vp>(__v));
|
||||
}
|
||||
|
||||
template <class _Vp>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator __insert_multi(const_iterator __p, _Vp&& __v) {
|
||||
return __emplace_hint_multi(__p, std::forward<_Vp>(__v));
|
||||
}
|
||||
|
||||
template <class _ValueT = _Tp, __enable_if_t<__is_tree_value_type<_ValueT>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI void __insert_multi_from_orphaned_node(const_iterator __p, value_type&& __value) {
|
||||
__emplace_hint_multi(__p, const_cast<key_type&&>(__value.first), std::move(__value.second));
|
||||
@ -1360,7 +1318,7 @@ void __tree<_Tp, _Compare, _Allocator>::__assign_unique(_ForwardIterator __first
|
||||
}
|
||||
}
|
||||
for (; __first != __last; ++__first)
|
||||
__insert_unique(*__first);
|
||||
__emplace_unique(*__first);
|
||||
}
|
||||
|
||||
template <class _Tp, class _Compare, class _Allocator>
|
||||
@ -1380,7 +1338,7 @@ void __tree<_Tp, _Compare, _Allocator>::__assign_multi(_InputIterator __first, _
|
||||
}
|
||||
const_iterator __e = end();
|
||||
for (; __first != __last; ++__first)
|
||||
__insert_multi(__e, *__first);
|
||||
__emplace_hint_multi(__e, *__first);
|
||||
}
|
||||
|
||||
template <class _Tp, class _Compare, class _Allocator>
|
||||
|
||||
@ -520,7 +520,7 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator end() const { return __table_.end(); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI std::pair<iterator, bool> insert(const value_type& __x) {
|
||||
return __table_.__insert_unique(__x);
|
||||
return __table_.__emplace_unique(__x);
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, const value_type& __x) { return insert(__x).first; }
|
||||
template <class _InputIterator>
|
||||
@ -625,7 +625,7 @@ template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
|
||||
template <class _InputIterator>
|
||||
inline void hash_map<_Key, _Tp, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
|
||||
for (; __first != __last; ++__first)
|
||||
__table_.__insert_unique(*__first);
|
||||
__table_.__emplace_unique(*__first);
|
||||
}
|
||||
|
||||
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
|
||||
@ -744,7 +744,7 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator begin() const { return __table_.begin(); }
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator end() const { return __table_.end(); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __x) { return __table_.__insert_multi(__x); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __x) { return __table_.__emplace_unique(__x); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, const value_type& __x) { return insert(__x); }
|
||||
template <class _InputIterator>
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __first, _InputIterator __last);
|
||||
@ -831,7 +831,7 @@ template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
|
||||
template <class _InputIterator>
|
||||
inline void hash_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
|
||||
for (; __first != __last; ++__first)
|
||||
__table_.__insert_multi(*__first);
|
||||
__table_.__emplace_unique(*__first);
|
||||
}
|
||||
|
||||
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
|
||||
|
||||
@ -279,7 +279,7 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator end() const { return __table_.end(); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI std::pair<iterator, bool> insert(const value_type& __x) {
|
||||
return __table_.__insert_unique(__x);
|
||||
return __table_.__emplace_unique(__x);
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, const value_type& __x) { return insert(__x).first; }
|
||||
template <class _InputIterator>
|
||||
@ -365,7 +365,7 @@ template <class _Value, class _Hash, class _Pred, class _Alloc>
|
||||
template <class _InputIterator>
|
||||
inline void hash_set<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
|
||||
for (; __first != __last; ++__first)
|
||||
__table_.__insert_unique(*__first);
|
||||
__table_.__emplace_unique(*__first);
|
||||
}
|
||||
|
||||
template <class _Value, class _Hash, class _Pred, class _Alloc>
|
||||
@ -458,7 +458,7 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator begin() const { return __table_.begin(); }
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator end() const { return __table_.end(); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __x) { return __table_.__insert_multi(__x); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __x) { return __table_.__emplace_unique(__x); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, const value_type& __x) { return insert(__x); }
|
||||
template <class _InputIterator>
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __first, _InputIterator __last);
|
||||
@ -543,7 +543,7 @@ template <class _Value, class _Hash, class _Pred, class _Alloc>
|
||||
template <class _InputIterator>
|
||||
inline void hash_multiset<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
|
||||
for (; __first != __last; ++__first)
|
||||
__table_.__insert_multi(*__first);
|
||||
__table_.__emplace_unique(*__first);
|
||||
}
|
||||
|
||||
template <class _Value, class _Hash, class _Pred, class _Alloc>
|
||||
|
||||
@ -1057,29 +1057,29 @@ public:
|
||||
|
||||
template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(_Pp&& __p) {
|
||||
return __tree_.__insert_unique(std::forward<_Pp>(__p));
|
||||
return __tree_.__emplace_unique(std::forward<_Pp>(__p));
|
||||
}
|
||||
|
||||
template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __pos, _Pp&& __p) {
|
||||
return __tree_.__insert_unique(__pos.__i_, std::forward<_Pp>(__p));
|
||||
return __tree_.__emplace_hint_unique(__pos.__i_, std::forward<_Pp>(__p));
|
||||
}
|
||||
|
||||
# endif // _LIBCPP_CXX03_LANG
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __v) { return __tree_.__insert_unique(__v); }
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __v) { return __tree_.__emplace_unique(__v); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __v) {
|
||||
return __tree_.__insert_unique(__p.__i_, __v);
|
||||
return __tree_.__emplace_hint_unique(__p.__i_, __v);
|
||||
}
|
||||
|
||||
# ifndef _LIBCPP_CXX03_LANG
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(value_type&& __v) {
|
||||
return __tree_.__insert_unique(std::move(__v));
|
||||
return __tree_.__emplace_unique(std::move(__v));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __v) {
|
||||
return __tree_.__insert_unique(__p.__i_, std::move(__v));
|
||||
return __tree_.__emplace_hint_unique(__p.__i_, std::move(__v));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
|
||||
@ -1725,34 +1725,34 @@ public:
|
||||
|
||||
template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(_Pp&& __p) {
|
||||
return __tree_.__insert_multi(std::forward<_Pp>(__p));
|
||||
return __tree_.__emplace_multi(std::forward<_Pp>(__p));
|
||||
}
|
||||
|
||||
template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __pos, _Pp&& __p) {
|
||||
return __tree_.__insert_multi(__pos.__i_, std::forward<_Pp>(__p));
|
||||
return __tree_.__emplace_hint_multi(__pos.__i_, std::forward<_Pp>(__p));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __v) { return __tree_.__insert_multi(std::move(__v)); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __v) { return __tree_.__emplace_multi(std::move(__v)); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __v) {
|
||||
return __tree_.__insert_multi(__p.__i_, std::move(__v));
|
||||
return __tree_.__emplace_hint_multi(__p.__i_, std::move(__v));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
|
||||
|
||||
# endif // _LIBCPP_CXX03_LANG
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __v) { return __tree_.__insert_multi(__v); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __v) { return __tree_.__emplace_multi(__v); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __v) {
|
||||
return __tree_.__insert_multi(__p.__i_, __v);
|
||||
return __tree_.__emplace_hint_multi(__p.__i_, __v);
|
||||
}
|
||||
|
||||
template <class _InputIterator>
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __f, _InputIterator __l) {
|
||||
for (const_iterator __e = cend(); __f != __l; ++__f)
|
||||
__tree_.__insert_multi(__e.__i_, *__f);
|
||||
__tree_.__emplace_hint_multi(__e.__i_, *__f);
|
||||
}
|
||||
|
||||
# if _LIBCPP_STD_VER >= 23
|
||||
@ -1760,7 +1760,7 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
|
||||
const_iterator __end = cend();
|
||||
for (auto&& __element : __range) {
|
||||
__tree_.__insert_multi(__end.__i_, std::forward<decltype(__element)>(__element));
|
||||
__tree_.__emplace_hint_multi(__end.__i_, std::forward<decltype(__element)>(__element));
|
||||
}
|
||||
}
|
||||
# endif
|
||||
|
||||
@ -736,15 +736,15 @@ public:
|
||||
}
|
||||
# endif // _LIBCPP_CXX03_LANG
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __v) { return __tree_.__insert_unique(__v); }
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __v) { return __tree_.__emplace_unique(__v); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __v) {
|
||||
return __tree_.__insert_unique(__p, __v);
|
||||
return __tree_.__emplace_hint_unique(__p, __v);
|
||||
}
|
||||
|
||||
template <class _InputIterator>
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __f, _InputIterator __l) {
|
||||
for (const_iterator __e = cend(); __f != __l; ++__f)
|
||||
__tree_.__insert_unique(__e, *__f);
|
||||
__tree_.__emplace_hint_unique(__e, *__f);
|
||||
}
|
||||
|
||||
# if _LIBCPP_STD_VER >= 23
|
||||
@ -752,18 +752,18 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
|
||||
const_iterator __end = cend();
|
||||
for (auto&& __element : __range) {
|
||||
__tree_.__insert_unique(__end, std::forward<decltype(__element)>(__element));
|
||||
__tree_.__emplace_hint_unique(__end, std::forward<decltype(__element)>(__element));
|
||||
}
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifndef _LIBCPP_CXX03_LANG
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(value_type&& __v) {
|
||||
return __tree_.__insert_unique(std::move(__v));
|
||||
return __tree_.__emplace_unique(std::move(__v));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __v) {
|
||||
return __tree_.__insert_unique(__p, std::move(__v));
|
||||
return __tree_.__emplace_hint_unique(__p, std::move(__v));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
|
||||
@ -1201,15 +1201,15 @@ public:
|
||||
}
|
||||
# endif // _LIBCPP_CXX03_LANG
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __v) { return __tree_.__insert_multi(__v); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __v) { return __tree_.__emplace_multi(__v); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __v) {
|
||||
return __tree_.__insert_multi(__p, __v);
|
||||
return __tree_.__emplace_hint_multi(__p, __v);
|
||||
}
|
||||
|
||||
template <class _InputIterator>
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __f, _InputIterator __l) {
|
||||
for (const_iterator __e = cend(); __f != __l; ++__f)
|
||||
__tree_.__insert_multi(__e, *__f);
|
||||
__tree_.__emplace_hint_multi(__e, *__f);
|
||||
}
|
||||
|
||||
# if _LIBCPP_STD_VER >= 23
|
||||
@ -1217,16 +1217,16 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
|
||||
const_iterator __end = cend();
|
||||
for (auto&& __element : __range) {
|
||||
__tree_.__insert_multi(__end, std::forward<decltype(__element)>(__element));
|
||||
__tree_.__emplace_hint_multi(__end, std::forward<decltype(__element)>(__element));
|
||||
}
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifndef _LIBCPP_CXX03_LANG
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __v) { return __tree_.__insert_multi(std::move(__v)); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __v) { return __tree_.__emplace_multi(std::move(__v)); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __v) {
|
||||
return __tree_.__insert_multi(__p, std::move(__v));
|
||||
return __tree_.__emplace_hint_multi(__p, std::move(__v));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
|
||||
|
||||
@ -1136,7 +1136,7 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return __table_.begin(); }
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return __table_.end(); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __x) { return __table_.__insert_unique(__x); }
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __x) { return __table_.__emplace_unique(__x); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, const value_type& __x) { return insert(__x).first; }
|
||||
|
||||
@ -1147,7 +1147,7 @@ public:
|
||||
template <_ContainerCompatibleRange<value_type> _Range>
|
||||
_LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
|
||||
for (auto&& __element : __range) {
|
||||
__table_.__insert_unique(std::forward<decltype(__element)>(__element));
|
||||
__table_.__emplace_unique(std::forward<decltype(__element)>(__element));
|
||||
}
|
||||
}
|
||||
# endif
|
||||
@ -1156,16 +1156,16 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(value_type&& __x) {
|
||||
return __table_.__insert_unique(std::move(__x));
|
||||
return __table_.__emplace_unique(std::move(__x));
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, value_type&& __x) {
|
||||
return __table_.__insert_unique(std::move(__x)).first;
|
||||
return __table_.__emplace_unique(std::move(__x)).first;
|
||||
}
|
||||
|
||||
template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(_Pp&& __x) {
|
||||
return __table_.__insert_unique(std::forward<_Pp>(__x));
|
||||
return __table_.__emplace_unique(std::forward<_Pp>(__x));
|
||||
}
|
||||
|
||||
template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
|
||||
@ -1640,7 +1640,7 @@ template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
|
||||
template <class _InputIterator>
|
||||
inline void unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
|
||||
for (; __first != __last; ++__first)
|
||||
__table_.__insert_unique(*__first);
|
||||
__table_.__emplace_unique(*__first);
|
||||
}
|
||||
|
||||
# ifndef _LIBCPP_CXX03_LANG
|
||||
@ -1944,10 +1944,10 @@ public:
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return __table_.begin(); }
|
||||
_LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return __table_.end(); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __x) { return __table_.__insert_multi(__x); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __x) { return __table_.__emplace_multi(__x); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __x) {
|
||||
return __table_.__insert_multi(__p.__i_, __x);
|
||||
return __table_.__emplace_hint_multi(__p.__i_, __x);
|
||||
}
|
||||
|
||||
template <class _InputIterator>
|
||||
@ -1957,27 +1957,27 @@ public:
|
||||
template <_ContainerCompatibleRange<value_type> _Range>
|
||||
_LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
|
||||
for (auto&& __element : __range) {
|
||||
__table_.__insert_multi(std::forward<decltype(__element)>(__element));
|
||||
__table_.__emplace_multi(std::forward<decltype(__element)>(__element));
|
||||
}
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifndef _LIBCPP_CXX03_LANG
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __x) { return __table_.__insert_multi(std::move(__x)); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __x) { return __table_.__emplace_multi(std::move(__x)); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __x) {
|
||||
return __table_.__insert_multi(__p.__i_, std::move(__x));
|
||||
return __table_.__emplace_hint_multi(__p.__i_, std::move(__x));
|
||||
}
|
||||
|
||||
template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(_Pp&& __x) {
|
||||
return __table_.__insert_multi(std::forward<_Pp>(__x));
|
||||
return __table_.__emplace_multi(std::forward<_Pp>(__x));
|
||||
}
|
||||
|
||||
template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, _Pp&& __x) {
|
||||
return __table_.__insert_multi(__p.__i_, std::forward<_Pp>(__x));
|
||||
return __table_.__emplace_hint_multi(__p.__i_, std::forward<_Pp>(__x));
|
||||
}
|
||||
|
||||
template <class... _Args>
|
||||
@ -2396,7 +2396,7 @@ template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
|
||||
template <class _InputIterator>
|
||||
inline void unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
|
||||
for (; __first != __last; ++__first)
|
||||
__table_.__insert_multi(*__first);
|
||||
__table_.__emplace_multi(*__first);
|
||||
}
|
||||
|
||||
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
|
||||
|
||||
@ -769,13 +769,13 @@ public:
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(value_type&& __x) {
|
||||
return __table_.__insert_unique(std::move(__x));
|
||||
return __table_.__emplace_unique(std::move(__x));
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, value_type&& __x) { return insert(std::move(__x)).first; }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
|
||||
# endif // _LIBCPP_CXX03_LANG
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __x) { return __table_.__insert_unique(__x); }
|
||||
_LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __x) { return __table_.__emplace_unique(__x); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator, const value_type& __x) { return insert(__x).first; }
|
||||
template <class _InputIterator>
|
||||
@ -785,7 +785,7 @@ public:
|
||||
template <_ContainerCompatibleRange<value_type> _Range>
|
||||
_LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
|
||||
for (auto&& __element : __range) {
|
||||
__table_.__insert_unique(std::forward<decltype(__element)>(__element));
|
||||
__table_.__emplace_unique(std::forward<decltype(__element)>(__element));
|
||||
}
|
||||
}
|
||||
# endif
|
||||
@ -1096,7 +1096,7 @@ unordered_set<_Value, _Hash, _Pred, _Alloc>::unordered_set(unordered_set&& __u,
|
||||
if (__a != __u.get_allocator()) {
|
||||
iterator __i = __u.begin();
|
||||
while (__u.size() != 0)
|
||||
__table_.__insert_unique(std::move(__u.__table_.remove(__i++)->__get_value()));
|
||||
__table_.__emplace_unique(std::move(__u.__table_.remove(__i++)->__get_value()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1146,7 +1146,7 @@ template <class _Value, class _Hash, class _Pred, class _Alloc>
|
||||
template <class _InputIterator>
|
||||
inline void unordered_set<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
|
||||
for (; __first != __last; ++__first)
|
||||
__table_.__insert_unique(*__first);
|
||||
__table_.__emplace_unique(*__first);
|
||||
}
|
||||
|
||||
template <class _Value, class _Hash, class _Pred, class _Alloc>
|
||||
@ -1374,17 +1374,17 @@ public:
|
||||
return __table_.__emplace_hint_multi(__p, std::forward<_Args>(__args)...);
|
||||
}
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __x) { return __table_.__insert_multi(std::move(__x)); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(value_type&& __x) { return __table_.__emplace_multi(std::move(__x)); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __x) {
|
||||
return __table_.__insert_multi(__p, std::move(__x));
|
||||
return __table_.__emplace_hint_multi(__p, std::move(__x));
|
||||
}
|
||||
_LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
|
||||
# endif // _LIBCPP_CXX03_LANG
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __x) { return __table_.__insert_multi(__x); }
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const value_type& __x) { return __table_.__emplace_multi(__x); }
|
||||
|
||||
_LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __x) {
|
||||
return __table_.__insert_multi(__p, __x);
|
||||
return __table_.__emplace_hint_multi(__p, __x);
|
||||
}
|
||||
|
||||
template <class _InputIterator>
|
||||
@ -1394,7 +1394,7 @@ public:
|
||||
template <_ContainerCompatibleRange<value_type> _Range>
|
||||
_LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
|
||||
for (auto&& __element : __range) {
|
||||
__table_.__insert_multi(std::forward<decltype(__element)>(__element));
|
||||
__table_.__emplace_multi(std::forward<decltype(__element)>(__element));
|
||||
}
|
||||
}
|
||||
# endif
|
||||
@ -1714,7 +1714,7 @@ unordered_multiset<_Value, _Hash, _Pred, _Alloc>::unordered_multiset(
|
||||
if (__a != __u.get_allocator()) {
|
||||
iterator __i = __u.begin();
|
||||
while (__u.size() != 0)
|
||||
__table_.__insert_multi(std::move(__u.__table_.remove(__i++)->__get_value()));
|
||||
__table_.__emplace_multi(std::move(__u.__table_.remove(__i++)->__get_value()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1764,7 +1764,7 @@ template <class _Value, class _Hash, class _Pred, class _Alloc>
|
||||
template <class _InputIterator>
|
||||
inline void unordered_multiset<_Value, _Hash, _Pred, _Alloc>::insert(_InputIterator __first, _InputIterator __last) {
|
||||
for (; __first != __last; ++__first)
|
||||
__table_.__insert_multi(*__first);
|
||||
__table_.__emplace_multi(*__first);
|
||||
}
|
||||
|
||||
template <class _Value, class _Hash, class _Pred, class _Alloc>
|
||||
|
||||
@ -50,7 +50,7 @@ void testMapInsert() {
|
||||
// Testing C::insert(value_type&)
|
||||
Container c;
|
||||
ValueTp v(42, 1);
|
||||
cc->expect<const ValueTp&>();
|
||||
cc->expect<ValueTp&>();
|
||||
assert(c.insert(v).second);
|
||||
assert(!cc->unchecked());
|
||||
{
|
||||
@ -76,7 +76,7 @@ void testMapInsert() {
|
||||
// Testing C::insert(const value_type&&)
|
||||
Container c;
|
||||
const ValueTp v(42, 1);
|
||||
cc->expect<const ValueTp&>();
|
||||
cc->expect<const ValueTp&&>();
|
||||
assert(c.insert(std::move(v)).second);
|
||||
assert(!cc->unchecked());
|
||||
{
|
||||
@ -139,7 +139,7 @@ void testMapInsert() {
|
||||
// Testing C::insert(Iter, Iter) for *Iter = value_type&
|
||||
Container c;
|
||||
ValueTp ValueList[] = {ValueTp(1, 1), ValueTp(2, 1), ValueTp(3, 1)};
|
||||
cc->expect<ValueTp const&>(3);
|
||||
cc->expect<ValueTp&>(3);
|
||||
c.insert(std::begin(ValueList), std::end(ValueList));
|
||||
assert(!cc->unchecked());
|
||||
{
|
||||
@ -180,7 +180,7 @@ void testMapInsertHint() {
|
||||
// Testing C::insert(p, value_type&)
|
||||
Container c;
|
||||
ValueTp v(42, 1);
|
||||
cc->expect<ValueTp const&>();
|
||||
cc->expect<ValueTp&>();
|
||||
It ret = c.insert(c.end(), v);
|
||||
assert(ret != c.end());
|
||||
assert(c.size() == 1);
|
||||
@ -229,7 +229,7 @@ void testMapInsertHint() {
|
||||
// Testing C::insert(p, const value_type&&)
|
||||
Container c;
|
||||
const ValueTp v(42, 1);
|
||||
cc->expect<const ValueTp&>();
|
||||
cc->expect<const ValueTp&&>();
|
||||
It ret = c.insert(c.end(), std::move(v));
|
||||
assert(ret != c.end());
|
||||
assert(c.size() == 1);
|
||||
|
||||
@ -125,7 +125,7 @@ void testSetInsert() {
|
||||
// Testing C::insert(Iter, Iter) for *Iter = value_type&"
|
||||
Container c;
|
||||
ValueTp ValueList[] = {ValueTp(1), ValueTp(2), ValueTp(3)};
|
||||
cc->expect<ValueTp const&>(3);
|
||||
cc->expect<ValueTp&>(3);
|
||||
c.insert(std::begin(ValueList), std::end(ValueList));
|
||||
assert(!cc->unchecked());
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user