aboutsummaryrefslogtreecommitdiff
path: root/system/include/libcxx/map
diff options
context:
space:
mode:
Diffstat (limited to 'system/include/libcxx/map')
-rw-r--r--system/include/libcxx/map315
1 files changed, 155 insertions, 160 deletions
diff --git a/system/include/libcxx/map b/system/include/libcxx/map
index 886aecf2..dd98da5e 100644
--- a/system/include/libcxx/map
+++ b/system/include/libcxx/map
@@ -375,15 +375,21 @@ swap(multimap<Key, T, Compare, Allocator>& x,
#include <functional>
#include <initializer_list>
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
+#endif
_LIBCPP_BEGIN_NAMESPACE_STD
-template <class _Key, class _Tp, class _Compare, bool = is_empty<_Compare>::value>
+template <class _Key, class _Tp, class _Compare, bool = is_empty<_Compare>::value
+#if __has_feature(is_final)
+ && !__is_final(_Compare)
+#endif
+ >
class __map_value_compare
: private _Compare
{
- typedef pair<typename std::remove_const<_Key>::type, _Tp> _P;
+ typedef pair<typename std::remove_const<_Key>::type, _Tp> _Pp;
typedef pair<const _Key, _Tp> _CP;
public:
_LIBCPP_INLINE_VISIBILITY
@@ -400,25 +406,25 @@ public:
bool operator()(const _CP& __x, const _CP& __y) const
{return static_cast<const _Compare&>(*this)(__x.first, __y.first);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _CP& __x, const _P& __y) const
+ bool operator()(const _CP& __x, const _Pp& __y) const
{return static_cast<const _Compare&>(*this)(__x.first, __y.first);}
_LIBCPP_INLINE_VISIBILITY
bool operator()(const _CP& __x, const _Key& __y) const
{return static_cast<const _Compare&>(*this)(__x.first, __y);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _P& __x, const _CP& __y) const
+ bool operator()(const _Pp& __x, const _CP& __y) const
{return static_cast<const _Compare&>(*this)(__x.first, __y.first);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _P& __x, const _P& __y) const
+ bool operator()(const _Pp& __x, const _Pp& __y) const
{return static_cast<const _Compare&>(*this)(__x.first, __y.first);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _P& __x, const _Key& __y) const
+ bool operator()(const _Pp& __x, const _Key& __y) const
{return static_cast<const _Compare&>(*this)(__x.first, __y);}
_LIBCPP_INLINE_VISIBILITY
bool operator()(const _Key& __x, const _CP& __y) const
{return static_cast<const _Compare&>(*this)(__x, __y.first);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _Key& __x, const _P& __y) const
+ bool operator()(const _Key& __x, const _Pp& __y) const
{return static_cast<const _Compare&>(*this)(__x, __y.first);}
_LIBCPP_INLINE_VISIBILITY
bool operator()(const _Key& __x, const _Key& __y) const
@@ -430,7 +436,7 @@ class __map_value_compare<_Key, _Tp, _Compare, false>
{
_Compare comp;
- typedef pair<typename std::remove_const<_Key>::type, _Tp> _P;
+ typedef pair<typename std::remove_const<_Key>::type, _Tp> _Pp;
typedef pair<const _Key, _Tp> _CP;
public:
@@ -449,25 +455,25 @@ public:
bool operator()(const _CP& __x, const _CP& __y) const
{return comp(__x.first, __y.first);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _CP& __x, const _P& __y) const
+ bool operator()(const _CP& __x, const _Pp& __y) const
{return comp(__x.first, __y.first);}
_LIBCPP_INLINE_VISIBILITY
bool operator()(const _CP& __x, const _Key& __y) const
{return comp(__x.first, __y);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _P& __x, const _CP& __y) const
+ bool operator()(const _Pp& __x, const _CP& __y) const
{return comp(__x.first, __y.first);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _P& __x, const _P& __y) const
+ bool operator()(const _Pp& __x, const _Pp& __y) const
{return comp(__x.first, __y.first);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _P& __x, const _Key& __y) const
+ bool operator()(const _Pp& __x, const _Key& __y) const
{return comp(__x.first, __y);}
_LIBCPP_INLINE_VISIBILITY
bool operator()(const _Key& __x, const _CP& __y) const
{return comp(__x, __y.first);}
_LIBCPP_INLINE_VISIBILITY
- bool operator()(const _Key& __x, const _P& __y) const
+ bool operator()(const _Key& __x, const _Pp& __y) const
{return comp(__x, __y.first);}
_LIBCPP_INLINE_VISIBILITY
bool operator()(const _Key& __x, const _Key& __y) const
@@ -874,59 +880,29 @@ public:
value_compare value_comp() const {return value_compare(__tree_.value_comp().key_comp());}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
- _LIBCPP_INLINE_VISIBILITY
- pair<iterator, bool>
- emplace() {return __tree_.__emplace_unique();}
-
- template <class _A0,
- class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
- _LIBCPP_INLINE_VISIBILITY
- pair<iterator, bool>
- emplace(_A0&& __a0)
- {return __tree_.__emplace_unique(_VSTD::forward<_A0>(__a0));}
-
#ifndef _LIBCPP_HAS_NO_VARIADICS
- template <class _A0, class ..._Args,
- class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
+ template <class ..._Args>
pair<iterator, bool>
- emplace(_A0&& __a0, _Args&& ...__args);
-
-#endif // _LIBCPP_HAS_NO_VARIADICS
-
- _LIBCPP_INLINE_VISIBILITY
- iterator
- emplace_hint(const_iterator __p)
- {return __tree_.__emplace_hint_unique(__p.__i_);}
-
- template <class _A0,
- class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
- _LIBCPP_INLINE_VISIBILITY
- iterator
- emplace_hint(const_iterator __p, _A0&& __a0)
- {return __tree_.__emplace_hint_unique(__p.__i_, _VSTD::forward<_A0>(__a0));}
-
-#ifndef _LIBCPP_HAS_NO_VARIADICS
+ emplace(_Args&& ...__args);
- template <class _A0, class ..._Args,
- class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
+ template <class ..._Args>
iterator
- emplace_hint(const_iterator __p, _A0&& __a0, _Args&& ...__args);
+ emplace_hint(const_iterator __p, _Args&& ...__args);
#endif // _LIBCPP_HAS_NO_VARIADICS
- template <class _P,
- class = typename enable_if<is_constructible<value_type, _P>::value>::type>
+ template <class _Pp,
+ class = typename enable_if<is_constructible<value_type, _Pp>::value>::type>
_LIBCPP_INLINE_VISIBILITY
- pair<iterator, bool> insert(_P&& __p)
- {return __tree_.__insert_unique(_VSTD::forward<_P>(__p));}
+ pair<iterator, bool> insert(_Pp&& __p)
+ {return __tree_.__insert_unique(_VSTD::forward<_Pp>(__p));}
- template <class _P,
- class = typename enable_if<is_constructible<value_type, _P>::value>::type>
+ template <class _Pp,
+ class = typename enable_if<is_constructible<value_type, _Pp>::value>::type>
_LIBCPP_INLINE_VISIBILITY
- iterator insert(const_iterator __pos, _P&& __p)
- {return __tree_.__insert_unique(__pos.__i_, _VSTD::forward<_P>(__p));}
+ iterator insert(const_iterator __pos, _Pp&& __p)
+ {return __tree_.__insert_unique(__pos.__i_, _VSTD::forward<_Pp>(__p));}
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
@@ -1004,18 +980,28 @@ private:
typedef typename __base::__node_const_pointer __node_const_pointer;
typedef typename __base::__node_base_pointer __node_base_pointer;
typedef typename __base::__node_base_const_pointer __node_base_const_pointer;
- typedef __map_node_destructor<__node_allocator> _D;
- typedef unique_ptr<__node, _D> __node_holder;
+ typedef __map_node_destructor<__node_allocator> _Dp;
+ typedef unique_ptr<__node, _Dp> __node_holder;
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
__node_holder __construct_node();
- template <class _A0,
- class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
- __node_holder __construct_node(_A0&& __a0);
+ template <class _A0>
+ typename enable_if
+ <
+ is_constructible<value_type, _A0>::value,
+ __node_holder
+ >::type
+ __construct_node(_A0&& __a0);
+ template <class _A0>
+ typename enable_if
+ <
+ is_constructible<key_type, _A0>::value,
+ __node_holder
+ >::type
+ __construct_node(_A0&& __a0);
#ifndef _LIBCPP_HAS_NO_VARIADICS
- template <class _A0, class ..._Args,
- class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
- __node_holder __construct_node(_A0&& __a0, _Args&& ...__args);
+ template <class _A0, class _A1, class ..._Args>
+ __node_holder __construct_node(_A0&& __a0, _A1&& __a1, _Args&& ...__args);
#endif // _LIBCPP_HAS_NO_VARIADICS
#else // _LIBCPP_HAS_NO_RVALUE_REFERENCES
__node_holder __construct_node(const key_type& __k);
@@ -1200,7 +1186,7 @@ typename map<_Key, _Tp, _Compare, _Allocator>::__node_holder
map<_Key, _Tp, _Compare, _Allocator>::__construct_node()
{
__node_allocator& __na = __tree_.__node_alloc();
- __node_holder __h(__node_traits::allocate(__na, 1), _D(__na));
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.first));
__h.get_deleter().__first_constructed = true;
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.second));
@@ -1209,32 +1195,53 @@ map<_Key, _Tp, _Compare, _Allocator>::__construct_node()
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-template <class _A0,
- class>
-typename map<_Key, _Tp, _Compare, _Allocator>::__node_holder
+template <class _A0>
+typename enable_if
+<
+ is_constructible<pair<const _Key, _Tp>, _A0>::value,
+ typename map<_Key, _Tp, _Compare, _Allocator>::__node_holder
+>::type
map<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0)
{
__node_allocator& __na = __tree_.__node_alloc();
- __node_holder __h(__node_traits::allocate(__na, 1), _D(__na));
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
__node_traits::construct(__na, _VSTD::addressof(__h->__value_), _VSTD::forward<_A0>(__a0));
__h.get_deleter().__first_constructed = true;
__h.get_deleter().__second_constructed = true;
return __h;
}
+template <class _Key, class _Tp, class _Compare, class _Allocator>
+template <class _A0>
+typename enable_if
+<
+ is_constructible<_Key, _A0>::value,
+ typename map<_Key, _Tp, _Compare, _Allocator>::__node_holder
+>::type
+map<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0)
+{
+ __node_allocator& __na = __tree_.__node_alloc();
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
+ __node_traits::construct(__na, _VSTD::addressof(__h->__value_.first), _VSTD::forward<_A0>(__a0));
+ __h.get_deleter().__first_constructed = true;
+ __node_traits::construct(__na, _VSTD::addressof(__h->__value_.second));
+ __h.get_deleter().__second_constructed = true;
+ return __h;
+}
+
#ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _Key, class _Tp, class _Compare, class _Allocator>
-template <class _A0, class ..._Args,
- class>
+template <class _A0, class _A1, class ..._Args>
typename map<_Key, _Tp, _Compare, _Allocator>::__node_holder
-map<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0, _Args&& ...__args)
+map<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0, _A1&& __a1, _Args&& ...__args)
{
__node_allocator& __na = __tree_.__node_alloc();
- __node_holder __h(__node_traits::allocate(__na, 1), _D(__na));
- __node_traits::construct(__na, _VSTD::addressof(__h->__value_.first), _VSTD::forward<_A0>(__a0));
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
+ __node_traits::construct(__na, _VSTD::addressof(__h->__value_),
+ _VSTD::forward<_A0>(__a0), _VSTD::forward<_A1>(__a1),
+ _VSTD::forward<_Args>(__args)...);
__h.get_deleter().__first_constructed = true;
- __node_traits::construct(__na, _VSTD::addressof(__h->__value_.second), _VSTD::forward<_Args>(__args)...);
__h.get_deleter().__second_constructed = true;
return __h;
}
@@ -1248,7 +1255,7 @@ typename map<_Key, _Tp, _Compare, _Allocator>::__node_holder
map<_Key, _Tp, _Compare, _Allocator>::__construct_node(const key_type& __k)
{
__node_allocator& __na = __tree_.__node_alloc();
- __node_holder __h(__node_traits::allocate(__na, 1), _D(__na));
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.first), __k);
__h.get_deleter().__first_constructed = true;
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.second));
@@ -1323,14 +1330,11 @@ map<_Key, _Tp, _Compare, _Allocator>::at(const key_type& __k) const
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
template <class _Key, class _Tp, class _Compare, class _Allocator>
-template <class _A0, class ..._Args,
- class //= typename enable_if<is_constructible<_Key, _A0>::value>::type
- >
+template <class ..._Args>
pair<typename map<_Key, _Tp, _Compare, _Allocator>::iterator, bool>
-map<_Key, _Tp, _Compare, _Allocator>::emplace(_A0&& __a0, _Args&& ...__args)
+map<_Key, _Tp, _Compare, _Allocator>::emplace(_Args&& ...__args)
{
- __node_holder __h = __construct_node(_VSTD::forward<_A0>(__a0),
- _VSTD::forward<_Args>(__args)...);
+ __node_holder __h = __construct_node(_VSTD::forward<_Args>(__args)...);
pair<iterator, bool> __r = __tree_.__node_insert_unique(__h.get());
if (__r.second)
__h.release();
@@ -1338,15 +1342,12 @@ map<_Key, _Tp, _Compare, _Allocator>::emplace(_A0&& __a0, _Args&& ...__args)
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-template <class _A0, class ..._Args,
- class //= typename enable_if<is_constructible<_Key, _A0>::value>::type
- >
+template <class ..._Args>
typename map<_Key, _Tp, _Compare, _Allocator>::iterator
map<_Key, _Tp, _Compare, _Allocator>::emplace_hint(const_iterator __p,
- _A0&& __a0, _Args&& ...__args)
+ _Args&& ...__args)
{
- __node_holder __h = __construct_node(_VSTD::forward<_A0>(__a0),
- _VSTD::forward<_Args>(__args)...);
+ __node_holder __h = __construct_node(_VSTD::forward<_Args>(__args)...);
iterator __r = __tree_.__node_insert_unique(__p.__i_, __h.get());
if (__r.__i_.__ptr_ == __h.get())
__h.release();
@@ -1623,57 +1624,29 @@ public:
{return value_compare(__tree_.value_comp().key_comp());}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
-
- _LIBCPP_INLINE_VISIBILITY
- iterator emplace() {return __tree_.__emplace_multi();}
-
- template <class _A0,
- class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
- _LIBCPP_INLINE_VISIBILITY
- iterator
- emplace(_A0&& __a0)
- {return __tree_.__emplace_multi(_VSTD::forward<_A0>(__a0));}
-
#ifndef _LIBCPP_HAS_NO_VARIADICS
- template <class _A0, class ..._Args,
- class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
+ template <class ..._Args>
iterator
- emplace(_A0&& __a0, _Args&& ...__args);
-
-#endif // _LIBCPP_HAS_NO_VARIADICS
+ emplace(_Args&& ...__args);
- _LIBCPP_INLINE_VISIBILITY
- iterator emplace_hint(const_iterator __p)
- {return __tree_.__emplace_hint_multi(__p.__i_);}
-
- template <class _A0,
- class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
- _LIBCPP_INLINE_VISIBILITY
- iterator
- emplace_hint(const_iterator __p, _A0&& __a0)
- {return __tree_.__emplace_hint_multi(__p.__i_, _VSTD::forward<_A0>(__a0));}
-
-#ifndef _LIBCPP_HAS_NO_VARIADICS
-
- template <class _A0, class ..._Args,
- class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
+ template <class ..._Args>
iterator
- emplace_hint(const_iterator __p, _A0&& __a0, _Args&& ...__args);
+ emplace_hint(const_iterator __p, _Args&& ...__args);
#endif // _LIBCPP_HAS_NO_VARIADICS
- template <class _P,
- class = typename enable_if<is_constructible<value_type, _P>::value>::type>
+ template <class _Pp,
+ class = typename enable_if<is_constructible<value_type, _Pp>::value>::type>
_LIBCPP_INLINE_VISIBILITY
- iterator insert(_P&& __p)
- {return __tree_.__insert_multi(_VSTD::forward<_P>(__p));}
+ iterator insert(_Pp&& __p)
+ {return __tree_.__insert_multi(_VSTD::forward<_Pp>(__p));}
- template <class _P,
- class = typename enable_if<is_constructible<value_type, _P>::value>::type>
+ template <class _Pp,
+ class = typename enable_if<is_constructible<value_type, _Pp>::value>::type>
_LIBCPP_INLINE_VISIBILITY
- iterator insert(const_iterator __pos, _P&& __p)
- {return __tree_.__insert_multi(__pos.__i_, _VSTD::forward<_P>(__p));}
+ iterator insert(const_iterator __pos, _Pp&& __p)
+ {return __tree_.__insert_multi(__pos.__i_, _VSTD::forward<_Pp>(__p));}
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
@@ -1746,18 +1719,28 @@ private:
typedef typename __base::__node_allocator __node_allocator;
typedef typename __base::__node_pointer __node_pointer;
typedef typename __base::__node_const_pointer __node_const_pointer;
- typedef __map_node_destructor<__node_allocator> _D;
- typedef unique_ptr<__node, _D> __node_holder;
+ typedef __map_node_destructor<__node_allocator> _Dp;
+ typedef unique_ptr<__node, _Dp> __node_holder;
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
__node_holder __construct_node();
- template <class _A0,
- class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
- __node_holder __construct_node(_A0&& __a0);
+ template <class _A0>
+ typename enable_if
+ <
+ is_constructible<value_type, _A0>::value,
+ __node_holder
+ >::type
+ __construct_node(_A0&& __a0);
+ template <class _A0>
+ typename enable_if
+ <
+ is_constructible<key_type, _A0>::value,
+ __node_holder
+ >::type
+ __construct_node(_A0&& __a0);
#ifndef _LIBCPP_HAS_NO_VARIADICS
- template <class _A0, class ..._Args,
- class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
- __node_holder __construct_node(_A0&& __a0, _Args&& ...__args);
+ template <class _A0, class _A1, class ..._Args>
+ __node_holder __construct_node(_A0&& __a0, _A1&& __a1, _Args&& ...__args);
#endif // _LIBCPP_HAS_NO_VARIADICS
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
};
@@ -1782,7 +1765,7 @@ typename multimap<_Key, _Tp, _Compare, _Allocator>::__node_holder
multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node()
{
__node_allocator& __na = __tree_.__node_alloc();
- __node_holder __h(__node_traits::allocate(__na, 1), _D(__na));
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.first));
__h.get_deleter().__first_constructed = true;
__node_traits::construct(__na, _VSTD::addressof(__h->__value_.second));
@@ -1791,34 +1774,53 @@ multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node()
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-template <class _A0,
- class // = typename enable_if<is_constructible<value_type, _A0>::value>::type
- >
-typename multimap<_Key, _Tp, _Compare, _Allocator>::__node_holder
+template <class _A0>
+typename enable_if
+<
+ is_constructible<pair<const _Key, _Tp>, _A0>::value,
+ typename multimap<_Key, _Tp, _Compare, _Allocator>::__node_holder
+>::type
multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0)
{
__node_allocator& __na = __tree_.__node_alloc();
- __node_holder __h(__node_traits::allocate(__na, 1), _D(__na));
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
__node_traits::construct(__na, _VSTD::addressof(__h->__value_), _VSTD::forward<_A0>(__a0));
__h.get_deleter().__first_constructed = true;
__h.get_deleter().__second_constructed = true;
return __h;
}
+template <class _Key, class _Tp, class _Compare, class _Allocator>
+template <class _A0>
+typename enable_if
+<
+ is_constructible<_Key, _A0>::value,
+ typename multimap<_Key, _Tp, _Compare, _Allocator>::__node_holder
+>::type
+multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0)
+{
+ __node_allocator& __na = __tree_.__node_alloc();
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
+ __node_traits::construct(__na, _VSTD::addressof(__h->__value_.first), _VSTD::forward<_A0>(__a0));
+ __h.get_deleter().__first_constructed = true;
+ __node_traits::construct(__na, _VSTD::addressof(__h->__value_.second));
+ __h.get_deleter().__second_constructed = true;
+ return __h;
+}
+
#ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _Key, class _Tp, class _Compare, class _Allocator>
-template <class _A0, class ..._Args,
- class // = typename enable_if<is_constructible<key_type, _A0>::value>::type
- >
+template <class _A0, class _A1, class ..._Args>
typename multimap<_Key, _Tp, _Compare, _Allocator>::__node_holder
-multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0, _Args&& ...__args)
+multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0, _A1&& __a1, _Args&& ...__args)
{
__node_allocator& __na = __tree_.__node_alloc();
- __node_holder __h(__node_traits::allocate(__na, 1), _D(__na));
- __node_traits::construct(__na, _VSTD::addressof(__h->__value_.first), _VSTD::forward<_A0>(__a0));
+ __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
+ __node_traits::construct(__na, _VSTD::addressof(__h->__value_),
+ _VSTD::forward<_A0>(__a0), _VSTD::forward<_A1>(__a1),
+ _VSTD::forward<_Args>(__args)...);
__h.get_deleter().__first_constructed = true;
- __node_traits::construct(__na, _VSTD::addressof(__h->__value_.second), _VSTD::forward<_Args>(__args)...);
__h.get_deleter().__second_constructed = true;
return __h;
}
@@ -1829,30 +1831,23 @@ multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0, _Args&&
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
template <class _Key, class _Tp, class _Compare, class _Allocator>
-template <class _A0, class ..._Args,
- class //= typename enable_if<is_constructible<_Key, _A0>::value>::type
- >
+template <class ..._Args>
typename multimap<_Key, _Tp, _Compare, _Allocator>::iterator
-multimap<_Key, _Tp, _Compare, _Allocator>::emplace(_A0&& __a0, _Args&& ...__args)
+multimap<_Key, _Tp, _Compare, _Allocator>::emplace(_Args&& ...__args)
{
- __node_holder __h = __construct_node(_VSTD::forward<_A0>(__a0),
- _VSTD::forward<_Args>(__args)...);
+ __node_holder __h = __construct_node(_VSTD::forward<_Args>(__args)...);
iterator __r = __tree_.__node_insert_multi(__h.get());
__h.release();
return __r;
}
template <class _Key, class _Tp, class _Compare, class _Allocator>
-template <class _A0, class ..._Args,
- class //= typename enable_if<is_constructible<_Key, _A0>::value>::type
- >
+template <class ..._Args>
typename multimap<_Key, _Tp, _Compare, _Allocator>::iterator
multimap<_Key, _Tp, _Compare, _Allocator>::emplace_hint(const_iterator __p,
- _A0&& __a0,
_Args&& ...__args)
{
- __node_holder __h = __construct_node(_VSTD::forward<_A0>(__a0),
- _VSTD::forward<_Args>(__args)...);
+ __node_holder __h = __construct_node(_VSTD::forward<_Args>(__args)...);
iterator __r = __tree_.__node_insert_multi(__p.__i_, __h.get());
__h.release();
return __r;