[libcxx-commits] [PATCH] D128021: [libc++] Don't call key_eq in unordered_map/set rehashing routine

Mark de Wever via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Jun 17 10:15:34 PDT 2022

Mordante added a comment.

Thanks for your contribution! I'll have another look after all comment have been addressed.

Comment at: libcxx/include/__hash_table:863
-template <class _Tp, class _Hash, class _Equal, class _Alloc>
-class __hash_table
+template <bool _Unique_Keys>
+struct __hash_table_traits {
Can you add some comment why these traits are needed? The reason is in the commit message, but not in the code.

Comment at: libcxx/include/__hash_table:865
+struct __hash_table_traits {
+  typedef integral_constant<bool, _Unique_Keys> __unique_keys;
Nowadays we tend to use `using` instead of `typedef`. This works for all supported compilers in C++98/C++03 mode.

Comment at: libcxx/include/__hash_table:868
+template <class _Tp, class _Hash, class _Equal, class _Alloc, class _Traits>
+class __hash_table {
I'm not fond of name `_Traits` it very generic. How about `_UniqueKeys`?

Comment at: libcxx/include/unordered_map:1034
-    typedef __hash_table<__value_type, __hasher,
-                         __key_equal,  __allocator_type>   __table;
+    typedef __hash_table<__value_type, __hasher, __key_equal, __allocator_type, __hash_table_traits<true >> __table;
As an extension we add `unordered_map` to C++03.



More information about the libcxx-commits mailing list