On Mon, 13 May 2024 at 05:34, François Dumont <frs.dum...@gmail.com> wrote: > > libstdc++: [_Hashtable] Fix some implementation inconsistencies > > Get rid of the different usages of the mutable keyword except in > _Prime_rehash_policy where it is preserved for abi compatibility > reason. > > Fix comment to explain that we need the computation of bucket index > noexcept > to be able to rehash the container when needed. > > For Standard instantiations through std::unordered_xxx containers > we already > force caching of hash code when hash functor is not noexcep so it > is guarantied. > > The static_assert purpose in _Hashtable on _M_bucket_index is thus > limited > to usages of _Hashtable with exotic _Hashtable_traits. > > libstdc++-v3/ChangeLog: > > * include/bits/hashtable_policy.h > (_NodeBuilder<>::_S_build): Remove > const qualification on _NodeGenerator instance. > (_ReuseOrAllocNode<>::operator()(_Args&&...)): Remove const qualification. > (_ReuseOrAllocNode<>::_M_nodes): Remove mutable. > (_Insert_base<>::_M_insert_range): Remove _NodeGetter const > qualification. > (_Hash_code_base<>::_M_bucket_index(const > _Hash_node_value<>&, size_t)): > Simplify noexcept declaration, we already static_assert > that _RangeHash functor > is noexcept. > * include/bits/hashtable.h: Rework comments. Remove const > qualifier on > _NodeGenerator& arguments. > > Tested under Linux x64, ok to commit ?
OK for trunk, thanks.