+2010-08-13 Paolo Carlini <paolo.carlini@oracle.com>
+
+ * include/bits/hashtable.h (_Hashtable<>::operator=(const
+ _Hashtable&)): Move inline.
+ (operator=(_Hashtable&&)): Define.
+ * include/bits/unordered_map.h (unordered_map(unordered_map&&),
+ unordered_map(const unordered_map&), unordered_multimap
+ (unordered_multimap&&), unordered_multimap(const unordered_multimap&),
+ __unordered_map(__unordered_map&&), __unordered_map(const
+ __unordered_map&), __unordered_multimap(__unordered_multimap&&),
+ __unordered_multimap(const __unordered_multimap&)): Do not define,
+ leave implicit.
+ * include/bits/unordered_set.h (unordered_set(unordered_set&&),
+ unordered_set(const unordered_set&), unordered_multiset
+ (unordered_multiset&&), unordered_multiset(const unordered_multiset&),
+ __unordered_set(__unordered_set&&), __unordered_set(const
+ __unordered_set&), __unordered_multiset(__unordered_multiset&&),
+ __unordered_multiset(const __unordered_multiset&)): Likewise.
+
+ * include/bits/unordered_map.h (__unordered_map(initializer_list<>),
+ __unordered_map<>::operator=(initializer_list<>),
+ __unordered_multimap(initializer_list<>), __unordered_multimap<>::
+ operator=(initializer_list<>)): Add.
+ * include/bits/unordered_set.h (__unordered_set(initializer_list<>),
+ __unordered_set<>::operator=(initializer_list<>),
+ __unordered_multiset(initializer_list<>), __unordered_multiset<>::
+ operator=(initializer_list<>)): Likewise.
+
+ * include/bits/unordered_map.h (__unordered_map(_InputIterator,
+ _InputIterator, size_type __n), unordered_map(_InputIterator,
+ _InputIterator, size_type __n), unordered_map(initializer_list<>,
+ size_type __n), unordered_multimap(initializer_list<>, size_type __n)):
+ Fix __n default to 0.
+ * include/bits/unordered_set.h (__unordered_set(_InputIterator,
+ _InputIterator, size_type __n), unordered_set(_InputIterator,
+ _InputIterator, size_type __n), unordered_set(initializer_list<>,
+ size_type __n), unordered_multiset(initializer_list<>, size_type __n)):
+ Likewise.
+ * include/debug/unordered_map (unordered_map(_InputIterator,
+ _InputIterator, size_type __n), unordered_map(initializer_list<>,
+ size_type __n), unordered_map(_InputIterator, _InputIterator,
+ size_type __n), unordered_multimap(initializer_list<>, size_type __n)):
+ Likewise.
+ * include/debug/unordered_set (unordered_set(_InputIterator,
+ _InputIterator, size_type __n), unordered_set(initializer_list<>,
+ size_type __n), unordered_set(_InputIterator, _InputIterator,
+ size_type __n), unordered_multiset(initializer_list<>, size_type __n)):
+ Likewise.
+ * include/profile/unordered_map (unordered_map(_InputIterator,
+ _InputIterator, size_type __n), unordered_map(initializer_list<>,
+ size_type __n), unordered_map(_InputIterator, _InputIterator,
+ size_type __n), unordered_multimap(initializer_list<>, size_type __n)):
+ Likewise.
+ * include/profile/unordered_set (unordered_set(_InputIterator,
+ _InputIterator, size_type __n), unordered_set(initializer_list<>,
+ size_type __n), unordered_set(_InputIterator, _InputIterator,
+ size_type __n), unordered_multiset(initializer_list<>, size_type __n)):
+ Likewise.
+
2010-08-13 Paolo Carlini <paolo.carlini@oracle.com>
PR libstdc++/45281
_Hashtable(_Hashtable&&);
_Hashtable&
- operator=(const _Hashtable&);
+ operator=(const _Hashtable& __ht)
+ {
+ _Hashtable __tmp(__ht);
+ this->swap(__tmp);
+ return *this;
+ }
+
+ _Hashtable&
+ operator=(_Hashtable&& __ht)
+ {
+ // NB: DR 1204.
+ // NB: DR 675.
+ this->clear();
+ this->swap(__ht);
+ return *this;
+ }
~_Hashtable();
__ht._M_rehash_policy = _RehashPolicy();
}
- template<typename _Key, typename _Value,
- typename _Allocator, typename _ExtractKey, typename _Equal,
- typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
- bool __chc, bool __cit, bool __uk>
- _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
- _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>&
- _Hashtable<_Key, _Value, _Allocator, _ExtractKey, _Equal,
- _H1, _H2, _Hash, _RehashPolicy, __chc, __cit, __uk>::
- operator=(const _Hashtable& __ht)
- {
- _Hashtable __tmp(__ht);
- this->swap(__tmp);
- return *this;
- }
-
template<typename _Key, typename _Value,
typename _Allocator, typename _ExtractKey, typename _Equal,
typename _H1, typename _H2, typename _Hash, typename _RehashPolicy,
_Base;
public:
+ typedef typename _Base::value_type value_type;
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
template<typename _InputIterator>
__unordered_map(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
{ }
- __unordered_map(const __unordered_map& __x) = default;
+ __unordered_map(initializer_list<value_type> __l,
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__l.begin(), __l.end(), __n, __hf,
+ __detail::_Mod_range_hashing(),
+ __detail::_Default_ranged_hash(),
+ __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
+ { }
- __unordered_map(__unordered_map&& __x)
- : _Base(std::move(__x)) { }
+ __unordered_map&
+ operator=(initializer_list<value_type> __l)
+ {
+ this->clear();
+ this->insert(__l.begin(), __l.end());
+ return *this;
+ }
};
template<class _Key, class _Tp,
_Base;
public:
+ typedef typename _Base::value_type value_type;
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
template<typename _InputIterator>
__unordered_multimap(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
__eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
{ }
- __unordered_multimap(const __unordered_multimap& __x) = default;
+ __unordered_multimap(initializer_list<value_type> __l,
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__l.begin(), __l.end(), __n, __hf,
+ __detail::_Mod_range_hashing(),
+ __detail::_Default_ranged_hash(),
+ __eql, std::_Select1st<std::pair<const _Key, _Tp> >(), __a)
+ { }
- __unordered_multimap(__unordered_multimap&& __x)
- : _Base(std::move(__x)) { }
+ __unordered_multimap&
+ operator=(initializer_list<value_type> __l)
+ {
+ this->clear();
+ this->insert(__l.begin(), __l.end());
+ return *this;
+ }
};
template<class _Key, class _Tp, class _Hash, class _Pred, class _Alloc,
template<typename _InputIterator>
unordered_map(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
- unordered_map(const unordered_map& __x) = default;
-
- unordered_map(unordered_map&& __x)
- : _Base(std::move(__x)) { }
-
unordered_map(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
+ : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
{ }
- unordered_map&
- operator=(const unordered_map& __x) = default;
-
- unordered_map&
- operator=(unordered_map&& __x)
- {
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
- return *this;
- }
-
unordered_map&
operator=(initializer_list<value_type> __l)
{
: _Base(__n, __hf, __eql, __a)
{ }
-
template<typename _InputIterator>
unordered_multimap(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
- unordered_multimap(const unordered_multimap& __x) = default;
-
- unordered_multimap(unordered_multimap&& __x)
- : _Base(std::move(__x)) { }
-
unordered_multimap(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
+ : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
{ }
- unordered_multimap&
- operator=(const unordered_multimap& __x) = default;
-
- unordered_multimap&
- operator=(unordered_multimap&& __x)
- {
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
- return *this;
- }
-
unordered_multimap&
operator=(initializer_list<value_type> __l)
{
_Base;
public:
+ typedef typename _Base::value_type value_type;
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
- std::_Identity<_Value>(), __a)
+ std::_Identity<value_type>(), __a)
{ }
template<typename _InputIterator>
__unordered_set(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
- std::_Identity<_Value>(), __a)
+ std::_Identity<value_type>(), __a)
{ }
- __unordered_set(const __unordered_set& __x) = default;
+ __unordered_set(initializer_list<value_type> __l,
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__l.begin(), __l.end(), __n, __hf,
+ __detail::_Mod_range_hashing(),
+ __detail::_Default_ranged_hash(), __eql,
+ std::_Identity<value_type>(), __a)
+ { }
- __unordered_set(__unordered_set&& __x)
- : _Base(std::move(__x)) { }
+ __unordered_set&
+ operator=(initializer_list<value_type> __l)
+ {
+ this->clear();
+ this->insert(__l.begin(), __l.end());
+ return *this;
+ }
};
template<class _Value,
_Base;
public:
+ typedef typename _Base::value_type value_type;
typedef typename _Base::size_type size_type;
typedef typename _Base::hasher hasher;
typedef typename _Base::key_equal key_equal;
const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
- std::_Identity<_Value>(), __a)
+ std::_Identity<value_type>(), __a)
{ }
template<typename _InputIterator>
__unordered_multiset(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __detail::_Mod_range_hashing(),
__detail::_Default_ranged_hash(), __eql,
- std::_Identity<_Value>(), __a)
+ std::_Identity<value_type>(), __a)
{ }
- __unordered_multiset(const __unordered_multiset& __x) = default;
+ __unordered_multiset(initializer_list<value_type> __l,
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
+ : _Base(__l.begin(), __l.end(), __n, __hf,
+ __detail::_Mod_range_hashing(),
+ __detail::_Default_ranged_hash(), __eql,
+ std::_Identity<value_type>(), __a)
+ { }
- __unordered_multiset(__unordered_multiset&& __x)
- : _Base(std::move(__x)) { }
+ __unordered_multiset&
+ operator=(initializer_list<value_type> __l)
+ {
+ this->clear();
+ this->insert(__l.begin(), __l.end());
+ return *this;
+ }
};
template<class _Value, class _Hash, class _Pred, class _Alloc,
template<typename _InputIterator>
unordered_set(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
- unordered_set(const unordered_set& __x) = default;
-
- unordered_set(unordered_set&& __x)
- : _Base(std::move(__x)) { }
-
unordered_set(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
+ : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
{ }
- unordered_set&
- operator=(const unordered_set& __x) = default;
-
- unordered_set&
- operator=(unordered_set&& __x)
- {
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
- return *this;
- }
-
unordered_set&
operator=(initializer_list<value_type> __l)
{
template<typename _InputIterator>
unordered_multiset(_InputIterator __f, _InputIterator __l,
- typename _Base::size_type __n = 0,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{ }
- unordered_multiset(const unordered_multiset& __x) = default;
-
- unordered_multiset(unordered_multiset&& __x)
- : _Base(std::move(__x)) { }
-
unordered_multiset(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
- : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
+ : _Base(__l.begin(), __l.end(), __n, __hf, __eql, __a)
{ }
- unordered_multiset&
- operator=(const unordered_multiset& __x) = default;
-
- unordered_multiset&
- operator=(unordered_multiset&& __x)
- {
- // NB: DR 1204.
- // NB: DR 675.
- this->clear();
- this->swap(__x);
- return *this;
- }
-
unordered_multiset&
operator=(initializer_list<value_type> __l)
{
template<typename _InputIterator>
unordered_map(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(std::move(__x)), _Safe_base() { }
unordered_map(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
template<typename _InputIterator>
unordered_multimap(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(std::move(__x)), _Safe_base() { }
unordered_multimap(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
template<typename _InputIterator>
unordered_set(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(std::move(__x)), _Safe_base() { }
unordered_set(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
template<typename _InputIterator>
unordered_multiset(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
: _Base(std::move(__x)), _Safe_base() { }
unordered_multiset(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
template<typename _InputIterator>
unordered_map(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
unordered_map(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
explicit
unordered_multimap(size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
template<typename _InputIterator>
unordered_multimap(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
unordered_multimap(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
template<typename _InputIterator>
unordered_set(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
unordered_set(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())
explicit
unordered_multiset(size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
template<typename _InputIterator>
unordered_multiset(_InputIterator __f, _InputIterator __l,
- size_type __n = 10,
- const hasher& __hf = hasher(),
- const key_equal& __eql = key_equal(),
- const allocator_type& __a = allocator_type())
+ size_type __n = 0,
+ const hasher& __hf = hasher(),
+ const key_equal& __eql = key_equal(),
+ const allocator_type& __a = allocator_type())
: _Base(__f, __l, __n, __hf, __eql, __a)
{
__profcxx_hashtable_construct(this, _Base::bucket_count());
}
unordered_multiset(initializer_list<value_type> __l,
- size_type __n = 10,
+ size_type __n = 0,
const hasher& __hf = hasher(),
const key_equal& __eql = key_equal(),
const allocator_type& __a = allocator_type())