diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h index 4c12dc895b2..c544094847d 100644 --- a/libstdc++-v3/include/bits/hashtable.h +++ b/libstdc++-v3/include/bits/hashtable.h @@ -614,7 +614,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (_M_bucket_count < __l_bkt_count) rehash(__l_bkt_count); - this->_M_insert_range(__l.begin(), __l.end(), __roan, __unique_keys{}); + this->_M_insert_range(__l.begin(), __l.end(), __roan); return *this; } @@ -1254,8 +1254,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION } __alloc_node_gen_t __node_gen(*this); - for (; __f != __l; ++__f) - _M_insert(*__f, __node_gen, __uks); + this->_M_insert_range(__f, __l, __node_gen); } template void _M_insert_range(_InputIterator __first, _InputIterator __last, - const _NodeGetter&, true_type __uks); + const _NodeGetter&); - template + template void _M_insert_range(_InputIterator __first, _InputIterator __last, - const _NodeGetter&, false_type __uks); + true_type __uks); + + template + void + _M_insert_range(_InputIterator __first, _InputIterator __last, + false_type __uks); public: using iterator = _Node_iterator<_Value, __constant_iterators::value, @@ -966,11 +971,7 @@ namespace __detail template void insert(_InputIterator __first, _InputIterator __last) - { - __hashtable& __h = _M_conjure_hashtable(); - __node_gen_type __node_gen(__h); - return _M_insert_range(__first, __last, __node_gen, __unique_keys{}); - } + { _M_insert_range(__first, __last, __unique_keys{}); } }; template:: _M_insert_range(_InputIterator __first, _InputIterator __last, - const _NodeGetter& __node_gen, true_type __uks) + const _NodeGetter& __node_gen) { __hashtable& __h = _M_conjure_hashtable(); for (; __first != __last; ++__first) - __h._M_insert(*__first, __node_gen, __uks); + __h._M_insert(*__first, __node_gen, __unique_keys{}); } template - template + template + void + _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, + _Hash, _RangeHash, _Unused, + _RehashPolicy, _Traits>:: + _M_insert_range(_InputIterator __first, _InputIterator __last, + true_type /* __uks */) + { + __hashtable& __h = _M_conjure_hashtable(); + __node_gen_type __node_gen(__h); + _M_insert_range(__first, __last, __node_gen); + } + + template + template void _Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>:: _M_insert_range(_InputIterator __first, _InputIterator __last, - const _NodeGetter& __node_gen, false_type __uks) + false_type /* __uks */) { using __rehash_type = typename __hashtable::__rehash_type; using __rehash_state = typename __hashtable::__rehash_state; @@ -1020,8 +1038,8 @@ namespace __detail if (__do_rehash.first) __h._M_rehash(__do_rehash.second, __saved_state); - for (; __first != __last; ++__first) - __h._M_insert(*__first, __node_gen, __uks); + __node_gen_type __node_gen(__h); + _M_insert_range(__first, __last, __node_gen); } /**