template<class ValueType, class KeySelect, class ValueSelect, class Hash, class KeyEqual, class Allocator, bool StoreHash, class GrowthPolicy>
template<bool IsConst>
class tsl::detail_robin_hash::robin_hash< ValueType, KeySelect, ValueSelect, Hash, KeyEqual, Allocator, StoreHash, GrowthPolicy >::robin_iterator< IsConst >
The 'operator*()' and 'operator->()' methods return a const reference and const pointer respectively to the stored value type.
In case of a map, to get a mutable reference to the value associated to a key (the '.second' in the stored pair), you have to call 'value()'.
The main reason for this is that if we returned a std::pair<Key, T>&
instead of a const std::pair<Key, T>&
, the user may modify the key which will put the map in a undefined state.
template<class ValueType, class KeySelect, class ValueSelect, class Hash, class KeyEqual, class Allocator, bool StoreHash, class GrowthPolicy>
template<bool IsConst>
template<bool TIsConst = IsConst, typename std::enable_if< TIsConst >::type * = nullptr>
template<class ValueType, class KeySelect, class ValueSelect, class Hash, class KeyEqual, class Allocator, bool StoreHash, class GrowthPolicy>
template<bool IsConst>
template<class U = ValueSelect, typename std::enable_if< has_mapped_type< U >::value &&IsConst >::type * = nullptr>
template<class ValueType, class KeySelect, class ValueSelect, class Hash, class KeyEqual, class Allocator, bool StoreHash, class GrowthPolicy>
template<bool IsConst>
template<class U = ValueSelect, typename std::enable_if< has_mapped_type< U >::value &&!IsConst >::type * = nullptr>