More fixes: One of my fixes to type_traits earlier today was incorrect, so that is reverted. Recently clang appears to have tightened up its definition of is_convertible and that has caused some failures in [unordered_][multi]map. I've switched to using is_constructible to restablish the desired functionality in [unordered_][multi]map. Specifically, inserting rvalues of move-only types for the keys.

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@133402 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Howard Hinnant 2011-06-19 21:45:00 +00:00
parent d4b957820c
commit 7604fea08c
3 changed files with 46 additions and 46 deletions

View File

@ -869,7 +869,7 @@ public:
emplace() {return __tree_.__emplace_unique();} emplace() {return __tree_.__emplace_unique();}
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
pair<iterator, bool> pair<iterator, bool>
emplace(_A0&& __a0) emplace(_A0&& __a0)
@ -878,7 +878,7 @@ public:
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
pair<iterator, bool> pair<iterator, bool>
emplace(_A0&& __a0, _Args&& ...__args); emplace(_A0&& __a0, _Args&& ...__args);
@ -890,7 +890,7 @@ public:
{return __tree_.__emplace_hint_unique(__p.__i_);} {return __tree_.__emplace_hint_unique(__p.__i_);}
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator iterator
emplace_hint(const_iterator __p, _A0&& __a0) emplace_hint(const_iterator __p, _A0&& __a0)
@ -899,20 +899,20 @@ public:
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
iterator iterator
emplace_hint(const_iterator __p, _A0&& __a0, _Args&& ...__args); emplace_hint(const_iterator __p, _A0&& __a0, _Args&& ...__args);
#endif // _LIBCPP_HAS_NO_VARIADICS #endif // _LIBCPP_HAS_NO_VARIADICS
template <class _P, template <class _P,
class = typename enable_if<is_convertible<_P, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _P>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
pair<iterator, bool> insert(_P&& __p) pair<iterator, bool> insert(_P&& __p)
{return __tree_.__insert_unique(_STD::forward<_P>(__p));} {return __tree_.__insert_unique(_STD::forward<_P>(__p));}
template <class _P, template <class _P,
class = typename enable_if<is_convertible<_P, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _P>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator insert(const_iterator __pos, _P&& __p) iterator insert(const_iterator __pos, _P&& __p)
{return __tree_.__insert_unique(__pos.__i_, _STD::forward<_P>(__p));} {return __tree_.__insert_unique(__pos.__i_, _STD::forward<_P>(__p));}
@ -995,11 +995,11 @@ private:
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
__node_holder __construct_node(); __node_holder __construct_node();
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
__node_holder __construct_node(_A0&& __a0); __node_holder __construct_node(_A0&& __a0);
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
__node_holder __construct_node(_A0&& __a0, _Args&& ...__args); __node_holder __construct_node(_A0&& __a0, _Args&& ...__args);
#endif // _LIBCPP_HAS_NO_VARIADICS #endif // _LIBCPP_HAS_NO_VARIADICS
#else // _LIBCPP_HAS_NO_RVALUE_REFERENCES #else // _LIBCPP_HAS_NO_RVALUE_REFERENCES
@ -1309,7 +1309,7 @@ map<_Key, _Tp, _Compare, _Allocator>::at(const key_type& __k) const
template <class _Key, class _Tp, class _Compare, class _Allocator> template <class _Key, class _Tp, class _Compare, class _Allocator>
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class //= typename enable_if<is_convertible<_A0, _Key>::value>::type class //= typename enable_if<is_constructible<_Key, _A0>::value>::type
> >
pair<typename map<_Key, _Tp, _Compare, _Allocator>::iterator, bool> 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(_A0&& __a0, _Args&& ...__args)
@ -1324,7 +1324,7 @@ map<_Key, _Tp, _Compare, _Allocator>::emplace(_A0&& __a0, _Args&& ...__args)
template <class _Key, class _Tp, class _Compare, class _Allocator> template <class _Key, class _Tp, class _Compare, class _Allocator>
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class //= typename enable_if<is_convertible<_A0, _Key>::value>::type class //= typename enable_if<is_constructible<_Key, _A0>::value>::type
> >
typename map<_Key, _Tp, _Compare, _Allocator>::iterator typename map<_Key, _Tp, _Compare, _Allocator>::iterator
map<_Key, _Tp, _Compare, _Allocator>::emplace_hint(const_iterator __p, map<_Key, _Tp, _Compare, _Allocator>::emplace_hint(const_iterator __p,
@ -1601,7 +1601,7 @@ public:
iterator emplace() {return __tree_.__emplace_multi();} iterator emplace() {return __tree_.__emplace_multi();}
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator iterator
emplace(_A0&& __a0) emplace(_A0&& __a0)
@ -1610,7 +1610,7 @@ public:
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
iterator iterator
emplace(_A0&& __a0, _Args&& ...__args); emplace(_A0&& __a0, _Args&& ...__args);
@ -1621,7 +1621,7 @@ public:
{return __tree_.__emplace_hint_multi(__p.__i_);} {return __tree_.__emplace_hint_multi(__p.__i_);}
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator iterator
emplace_hint(const_iterator __p, _A0&& __a0) emplace_hint(const_iterator __p, _A0&& __a0)
@ -1630,20 +1630,20 @@ public:
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
iterator iterator
emplace_hint(const_iterator __p, _A0&& __a0, _Args&& ...__args); emplace_hint(const_iterator __p, _A0&& __a0, _Args&& ...__args);
#endif // _LIBCPP_HAS_NO_VARIADICS #endif // _LIBCPP_HAS_NO_VARIADICS
template <class _P, template <class _P,
class = typename enable_if<is_convertible<_P, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _P>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator insert(_P&& __p) iterator insert(_P&& __p)
{return __tree_.__insert_multi(_STD::forward<_P>(__p));} {return __tree_.__insert_multi(_STD::forward<_P>(__p));}
template <class _P, template <class _P,
class = typename enable_if<is_convertible<_P, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _P>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator insert(const_iterator __pos, _P&& __p) iterator insert(const_iterator __pos, _P&& __p)
{return __tree_.__insert_multi(__pos.__i_, _STD::forward<_P>(__p));} {return __tree_.__insert_multi(__pos.__i_, _STD::forward<_P>(__p));}
@ -1721,11 +1721,11 @@ private:
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
__node_holder __construct_node(); __node_holder __construct_node();
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
__node_holder __construct_node(_A0&& __a0); __node_holder __construct_node(_A0&& __a0);
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
__node_holder __construct_node(_A0&& __a0, _Args&& ...__args); __node_holder __construct_node(_A0&& __a0, _Args&& ...__args);
#endif // _LIBCPP_HAS_NO_VARIADICS #endif // _LIBCPP_HAS_NO_VARIADICS
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
@ -1761,7 +1761,7 @@ multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node()
template <class _Key, class _Tp, class _Compare, class _Allocator> template <class _Key, class _Tp, class _Compare, class _Allocator>
template <class _A0, template <class _A0,
class // = typename enable_if<is_convertible<_A0, value_type>::value>::type class // = typename enable_if<is_constructible<value_type, _A0>::value>::type
> >
typename multimap<_Key, _Tp, _Compare, _Allocator>::__node_holder typename multimap<_Key, _Tp, _Compare, _Allocator>::__node_holder
multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0) multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0)
@ -1778,7 +1778,7 @@ multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0)
template <class _Key, class _Tp, class _Compare, class _Allocator> template <class _Key, class _Tp, class _Compare, class _Allocator>
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class // = typename enable_if<is_convertible<_A0, key_type>::value>::type class // = typename enable_if<is_constructible<key_type, _A0>::value>::type
> >
typename multimap<_Key, _Tp, _Compare, _Allocator>::__node_holder 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, _Args&& ...__args)
@ -1799,7 +1799,7 @@ multimap<_Key, _Tp, _Compare, _Allocator>::__construct_node(_A0&& __a0, _Args&&
template <class _Key, class _Tp, class _Compare, class _Allocator> template <class _Key, class _Tp, class _Compare, class _Allocator>
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class //= typename enable_if<is_convertible<_A0, _Key>::value>::type class //= typename enable_if<is_constructible<_Key, _A0>::value>::type
> >
typename multimap<_Key, _Tp, _Compare, _Allocator>::iterator typename multimap<_Key, _Tp, _Compare, _Allocator>::iterator
multimap<_Key, _Tp, _Compare, _Allocator>::emplace(_A0&& __a0, _Args&& ...__args) multimap<_Key, _Tp, _Compare, _Allocator>::emplace(_A0&& __a0, _Args&& ...__args)
@ -1813,7 +1813,7 @@ multimap<_Key, _Tp, _Compare, _Allocator>::emplace(_A0&& __a0, _Args&& ...__args
template <class _Key, class _Tp, class _Compare, class _Allocator> template <class _Key, class _Tp, class _Compare, class _Allocator>
template <class _A0, class ..._Args, template <class _A0, class ..._Args,
class //= typename enable_if<is_convertible<_A0, _Key>::value>::type class //= typename enable_if<is_constructible<_Key, _A0>::value>::type
> >
typename multimap<_Key, _Tp, _Compare, _Allocator>::iterator typename multimap<_Key, _Tp, _Compare, _Allocator>::iterator
multimap<_Key, _Tp, _Compare, _Allocator>::emplace_hint(const_iterator __p, multimap<_Key, _Tp, _Compare, _Allocator>::emplace_hint(const_iterator __p,

View File

@ -2939,7 +2939,7 @@ struct __check_complete<_R _Class::*>
template <class ..._Args> template <class ..._Args>
auto auto
__invoke(__any, _Args&& ...__args) __invoke(__any, _Args&& ...__args)
-> __nat = delete; -> __nat;
// bullets 1 and 2 // bullets 1 and 2

View File

@ -728,7 +728,7 @@ public:
{return __table_.__emplace_unique();} {return __table_.__emplace_unique();}
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
pair<iterator, bool> emplace(_A0&& __a0) pair<iterator, bool> emplace(_A0&& __a0)
{return __table_.__emplace_unique(_STD::forward<_A0>(__a0));} {return __table_.__emplace_unique(_STD::forward<_A0>(__a0));}
@ -736,7 +736,7 @@ public:
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class... _Args, template <class _A0, class... _Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
pair<iterator, bool> emplace(_A0&& __a0, _Args&&... __args); pair<iterator, bool> emplace(_A0&& __a0, _Args&&... __args);
#endif // _LIBCPP_HAS_NO_VARIADICS #endif // _LIBCPP_HAS_NO_VARIADICS
@ -746,7 +746,7 @@ public:
{return __table_.__emplace_unique().first;} {return __table_.__emplace_unique().first;}
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator emplace_hint(const_iterator, _A0&& __a0) iterator emplace_hint(const_iterator, _A0&& __a0)
{return __table_.__emplace_unique(_STD::forward<_A0>(__a0)).first;} {return __table_.__emplace_unique(_STD::forward<_A0>(__a0)).first;}
@ -754,7 +754,7 @@ public:
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class... _Args, template <class _A0, class... _Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator emplace_hint(const_iterator, _A0&& __a0, _Args&&... __args) iterator emplace_hint(const_iterator, _A0&& __a0, _Args&&... __args)
{return emplace(_STD::forward<_A0>(__a0), {return emplace(_STD::forward<_A0>(__a0),
@ -766,7 +766,7 @@ public:
{return __table_.__insert_unique(__x);} {return __table_.__insert_unique(__x);}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _P, template <class _P,
class = typename enable_if<is_convertible<_P, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _P>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
pair<iterator, bool> insert(_P&& __x) pair<iterator, bool> insert(_P&& __x)
{return __table_.__insert_unique(_STD::forward<_P>(__x));} {return __table_.__insert_unique(_STD::forward<_P>(__x));}
@ -776,7 +776,7 @@ public:
{return insert(__x).first;} {return insert(__x).first;}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _P, template <class _P,
class = typename enable_if<is_convertible<_P, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _P>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator insert(const_iterator, _P&& __x) iterator insert(const_iterator, _P&& __x)
{return insert(_STD::forward<_P>(__x)).first;} {return insert(_STD::forward<_P>(__x)).first;}
@ -869,11 +869,11 @@ private:
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class... _Args, template <class _A0, class... _Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
__node_holder __construct_node(_A0&& __a0, _Args&&... __args); __node_holder __construct_node(_A0&& __a0, _Args&&... __args);
#endif // _LIBCPP_HAS_NO_VARIADICS #endif // _LIBCPP_HAS_NO_VARIADICS
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
__node_holder __construct_node(_A0&& __a0); __node_holder __construct_node(_A0&& __a0);
#else // _LIBCPP_HAS_NO_RVALUE_REFERENCES #else // _LIBCPP_HAS_NO_RVALUE_REFERENCES
__node_holder __construct_node(const key_type& __k); __node_holder __construct_node(const key_type& __k);
@ -1037,7 +1037,7 @@ unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::operator=(
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
template <class _A0, class... _Args, template <class _A0, class... _Args,
class // = typename enable_if<is_convertible<_A0, key_type>::value>::type class // = typename enable_if<is_constructible<key_type, _A0>::value>::type
> >
typename unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__node_holder typename unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__node_holder
unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0, unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0,
@ -1058,7 +1058,7 @@ unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0,
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
template <class _A0, template <class _A0,
class // = typename enable_if<is_convertible<_A0, value_type>::value>::type class // = typename enable_if<is_constructible<value_type, _A0>::value>::type
> >
typename unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__node_holder typename unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__node_holder
unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0) unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0)
@ -1076,7 +1076,7 @@ unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0)
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
template <class _A0, class... _Args, template <class _A0, class... _Args,
class // = typename enable_if<is_convertible<_A0, key_type>::value>::type class // = typename enable_if<is_constructible<key_type, _A0>::value>::type
> >
pair<typename unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator, bool> pair<typename unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator, bool>
unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace(_A0&& __a0, _Args&&... __args) unordered_map<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace(_A0&& __a0, _Args&&... __args)
@ -1332,7 +1332,7 @@ public:
{return __table_.__emplace_multi();} {return __table_.__emplace_multi();}
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator emplace(_A0&& __a0) iterator emplace(_A0&& __a0)
{return __table_.__emplace_multi(_STD::forward<_A0>(__a0));} {return __table_.__emplace_multi(_STD::forward<_A0>(__a0));}
@ -1340,7 +1340,7 @@ public:
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class... _Args, template <class _A0, class... _Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
iterator emplace(_A0&& __a0, _Args&&... __args); iterator emplace(_A0&& __a0, _Args&&... __args);
#endif // _LIBCPP_HAS_NO_VARIADICS #endif // _LIBCPP_HAS_NO_VARIADICS
@ -1350,7 +1350,7 @@ public:
{return __table_.__emplace_hint_multi(__p.__i_);} {return __table_.__emplace_hint_multi(__p.__i_);}
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator emplace_hint(const_iterator __p, _A0&& __a0) iterator emplace_hint(const_iterator __p, _A0&& __a0)
{return __table_.__emplace_hint_multi(__p.__i_, _STD::forward<_A0>(__a0));} {return __table_.__emplace_hint_multi(__p.__i_, _STD::forward<_A0>(__a0));}
@ -1358,7 +1358,7 @@ public:
#ifndef _LIBCPP_HAS_NO_VARIADICS #ifndef _LIBCPP_HAS_NO_VARIADICS
template <class _A0, class... _Args, template <class _A0, class... _Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
iterator emplace_hint(const_iterator __p, _A0&& __a0, _Args&&... __args); iterator emplace_hint(const_iterator __p, _A0&& __a0, _Args&&... __args);
#endif // _LIBCPP_HAS_NO_VARIADICS #endif // _LIBCPP_HAS_NO_VARIADICS
#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
@ -1366,7 +1366,7 @@ public:
iterator insert(const value_type& __x) {return __table_.__insert_multi(__x);} iterator insert(const value_type& __x) {return __table_.__insert_multi(__x);}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _P, template <class _P,
class = typename enable_if<is_convertible<_P, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _P>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator insert(_P&& __x) iterator insert(_P&& __x)
{return __table_.__insert_multi(_STD::forward<_P>(__x));} {return __table_.__insert_multi(_STD::forward<_P>(__x));}
@ -1376,7 +1376,7 @@ public:
{return __table_.__insert_multi(__p.__i_, __x);} {return __table_.__insert_multi(__p.__i_, __x);}
#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
template <class _P, template <class _P,
class = typename enable_if<is_convertible<_P, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _P>::value>::type>
_LIBCPP_INLINE_VISIBILITY _LIBCPP_INLINE_VISIBILITY
iterator insert(const_iterator __p, _P&& __x) iterator insert(const_iterator __p, _P&& __x)
{return __table_.__insert_multi(__p.__i_, _STD::forward<_P>(__x));} {return __table_.__insert_multi(__p.__i_, _STD::forward<_P>(__x));}
@ -1461,10 +1461,10 @@ public:
private: private:
#if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) #if !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
template <class _A0, class... _Args, template <class _A0, class... _Args,
class = typename enable_if<is_convertible<_A0, key_type>::value>::type> class = typename enable_if<is_constructible<key_type, _A0>::value>::type>
__node_holder __construct_node(_A0&& __a0, _Args&&... __args); __node_holder __construct_node(_A0&& __a0, _Args&&... __args);
template <class _A0, template <class _A0,
class = typename enable_if<is_convertible<_A0, value_type>::value>::type> class = typename enable_if<is_constructible<value_type, _A0>::value>::type>
__node_holder __construct_node(_A0&& __a0); __node_holder __construct_node(_A0&& __a0);
#endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS) #endif // !defined(_LIBCPP_HAS_NO_RVALUE_REFERENCES) && !defined(_LIBCPP_HAS_NO_VARIADICS)
}; };
@ -1628,7 +1628,7 @@ unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::operator=(
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
template <class _A0, class... _Args, template <class _A0, class... _Args,
class // = typename enable_if<is_convertible<_A0, key_type>::value>::type class // = typename enable_if<is_constructible<key_type, _A0>::value>::type
> >
typename unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__node_holder typename unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__node_holder
unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node( unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(
@ -1649,7 +1649,7 @@ unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
template <class _A0, template <class _A0,
class // = typename enable_if<is_convertible<_A0, value_type>::value>::type class // = typename enable_if<is_constructible<value_type, _A0>::value>::type
> >
typename unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__node_holder typename unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__node_holder
unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0) unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0)
@ -1667,7 +1667,7 @@ unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::__construct_node(_A0&& __a0
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
template <class _A0, class... _Args, template <class _A0, class... _Args,
class // = typename enable_if<is_convertible<_A0, key_type>::value>::type class // = typename enable_if<is_constructible<key_type, _A0>::value>::type
> >
typename unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator typename unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator
unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace(_A0&& __a0, _Args&&... __args) unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace(_A0&& __a0, _Args&&... __args)
@ -1681,7 +1681,7 @@ unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace(_A0&& __a0, _Args&&
template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc> template <class _Key, class _Tp, class _Hash, class _Pred, class _Alloc>
template <class _A0, class... _Args, template <class _A0, class... _Args,
class // = typename enable_if<is_convertible<_A0, key_type>::value>::type class // = typename enable_if<is_constructible<key_type, _A0>::value>::type
> >
typename unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator typename unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::iterator
unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace_hint( unordered_multimap<_Key, _Tp, _Hash, _Pred, _Alloc>::emplace_hint(