Skip to content

Rename GenericView hash function

Tom Williams requested to merge gcc11-fix into master

Resolves the following build error in GCC11, caused by another function named hash_value being picked up in place of ours.

In file included from /usr/include/c++/11/bits/basic_string.h:48,
                 from /usr/include/c++/11/string:55,
                 from /build/____________________/swatch/swatch/action/src/common/GateKeeperView.cpp:9:
/usr/include/c++/11/string_view: In instantiation of ‘class std::basic_string_view<std::shared_ptr<const boost::any>, std::char_traits<std::shared_ptr<const boost::any> > >’:
/build/____________________/swatch/swatch/core/include/swatch/core/GenericView.hxx:63:23:   required from ‘size_t swatch::core::GenericView<T>::hash::operator()(const swatch::core::GenericView<T>&) const [with T = std::shared_ptr<const boost::any>; size_t = long unsigned int]’
/usr/include/c++/11/bits/hashtable_policy.h:1219:18:   required from ‘std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __cache_hash_code>::__hash_code std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __cache_hash_code>::_M_hash_code(const _Key&) const [with _Key = swatch::core::GenericView<std::shared_ptr<const boost::any> >; _Value = swatch::core::GenericView<std::shared_ptr<const boost::any> >; _ExtractKey = std::__detail::_Identity; _Hash = swatch::core::GenericView<std::shared_ptr<const boost::any> >::hash; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; bool __cache_hash_code = true; std::__detail::_Hash_code_base<_Key, _Value, _ExtractKey, _Hash, _RangeHash, _Unused, __cache_hash_code>::__hash_code = long unsigned int]’
/usr/include/c++/11/bits/hashtable.h:2102:41:   required from ‘std::pair<typename std::__detail::_Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::iterator, bool> std::_Hashtable<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::_M_insert(_Arg&&, const _NodeGenerator&, std::true_type) [with _Arg = const swatch::core::GenericView<std::shared_ptr<const boost::any> >&; _NodeGenerator = std::__detail::_AllocNode<std::allocator<std::__detail::_Hash_node<swatch::core::GenericView<std::shared_ptr<const boost::any> >, true> > >; _Key = swatch::core::GenericView<std::shared_ptr<const boost::any> >; _Value = swatch::core::GenericView<std::shared_ptr<const boost::any> >; _Alloc = std::allocator<swatch::core::GenericView<std::shared_ptr<const boost::any> > >; _ExtractKey = std::__detail::_Identity; _Equal = std::equal_to<swatch::core::GenericView<std::shared_ptr<const boost::any> > >; _Hash = swatch::core::GenericView<std::shared_ptr<const boost::any> >::hash; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<true, true, true>; typename std::__detail::_Insert<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::iterator = std::__detail::_Insert_base<swatch::core::GenericView<std::shared_ptr<const boost::any> >, swatch::core::GenericView<std::shared_ptr<const boost::any> >, std::allocator<swatch::core::GenericView<std::shared_ptr<const boost::any> > >, std::__detail::_Identity, std::equal_to<swatch::core::GenericView<std::shared_ptr<const boost::any> > >, swatch::core::GenericView<std::shared_ptr<const boost::any> >::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, true, true> >::iterator; typename _Traits::__constant_iterators = std::__detail::_Hashtable_traits<true, true, true>::__constant_iterators; std::true_type = std::integral_constant<bool, true>]’
/usr/include/c++/11/bits/hashtable_policy.h:844:22:   required from ‘std::__detail::_Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::__ireturn_type std::__detail::_Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::insert(const value_type&) [with _Key = swatch::core::GenericView<std::shared_ptr<const boost::any> >; _Value = swatch::core::GenericView<std::shared_ptr<const boost::any> >; _Alloc = std::allocator<swatch::core::GenericView<std::shared_ptr<const boost::any> > >; _ExtractKey = std::__detail::_Identity; _Equal = std::equal_to<swatch::core::GenericView<std::shared_ptr<const boost::any> > >; _Hash = swatch::core::GenericView<std::shared_ptr<const boost::any> >::hash; _RangeHash = std::__detail::_Mod_range_hashing; _Unused = std::__detail::_Default_ranged_hash; _RehashPolicy = std::__detail::_Prime_rehash_policy; _Traits = std::__detail::_Hashtable_traits<true, true, true>; std::__detail::_Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::__ireturn_type = std::pair<std::__detail::_Node_iterator<swatch::core::GenericView<std::shared_ptr<const boost::any> >, true, true>, bool>; std::__detail::_Insert_base<_Key, _Value, _Alloc, _ExtractKey, _Equal, _Hash, _RangeHash, _Unused, _RehashPolicy, _Traits>::value_type = swatch::core::GenericView<std::shared_ptr<const boost::any> >]’
/usr/include/c++/11/bits/unordered_set.h:422:27:   required from ‘std::pair<typename std::_Hashtable<_Value, _Value, _Alloc, std::__detail::_Identity, _Pred, _Hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<std::__not_<std::__and_<std::__is_fast_hash<_Hash>, std::__is_nothrow_invocable<const _Hash&, const _Tp&> > >::value, true, true> >::iterator, bool> std::unordered_set<_Value, _Hash, _Pred, _Alloc>::insert(const value_type&) [with _Value = swatch::core::GenericView<std::shared_ptr<const boost::any> >; _Hash = swatch::core::GenericView<std::shared_ptr<const boost::any> >::hash; _Pred = std::equal_to<swatch::core::GenericView<std::shared_ptr<const boost::any> > >; _Alloc = std::allocator<swatch::core::GenericView<std::shared_ptr<const boost::any> > >; typename std::_Hashtable<_Value, _Value, _Alloc, std::__detail::_Identity, _Pred, _Hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<std::__not_<std::__and_<std::__is_fast_hash<_Hash>, std::__is_nothrow_invocable<const _Hash&, const _Tp&> > >::value, true, true> >::iterator = std::__detail::_Insert_base<swatch::core::GenericView<std::shared_ptr<const boost::any> >, swatch::core::GenericView<std::shared_ptr<const boost::any> >, std::allocator<swatch::core::GenericView<std::shared_ptr<const boost::any> > >, std::__detail::_Identity, std::equal_to<swatch::core::GenericView<std::shared_ptr<const boost::any> > >, swatch::core::GenericView<std::shared_ptr<const boost::any> >::hash, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<true, true, true> >::iterator; std::unordered_set<_Value, _Hash, _Pred, _Alloc>::value_type = swatch::core::GenericView<std::shared_ptr<const boost::any> >]’
/build/____________________/swatch/swatch/action/src/common/GateKeeperView.cpp:98:25:   required from here
/usr/include/c++/11/string_view:101:21: error: static assertion failed
  101 |       static_assert(is_trivial_v<_CharT> && is_standard_layout_v<_CharT>);
      |                     ^~~~~~~~~~~~~~~~~~~~
/usr/include/c++/11/string_view:101:21: note: ‘std::is_trivial_v<std::shared_ptr<const boost::any> >’ evaluates to false

Merge request reports