> On 2016-Mar-16, at 12:20, Eric Fiselier <e...@efcs.ca> wrote:
> 
> EricWF added a comment.
> 
> Adding inline comments for the implementation. Comments on the tests to 
> follow shortly.
> 
> 
> ================
> Comment at: include/__hash_table:103
> @@ -102,1 +102,3 @@
> 
> +template <class _ValTy, class _Key>
> +struct __extract_key;
> ----------------
> Could you make `__extract_key` behave the same way as `__can_extract_key` 
> where we apply the `__uncvref<ValTy>` instead of expecting the user to? 

I started with that, but it seemed to require many more
explicit specializations of `__extract_key`.  It's simpler to
handle all the possibilities via overloading.

I can have another look and see if I can find something that
seems more symmetric, but I don't think moving the __uncref
inside __extract_key is the right choice.

> ================
> Comment at: include/__hash_table:110
> @@ +109,3 @@
> +    : is_same<
> +          typename remove_const<typename 
> remove_reference<_ValTy>::type>::type,
> +          _Key> {};
> ----------------
> Assuming we can't be passed volatile types (I'll double check that). Then we 
> should just use `is_same<_RawValTy, _Key>`

I think we can be passed volatile types.  `emplace` forwards all
arguments, and the underlying type may have constructors from
volatile types.

> ================
> Comment at: include/__hash_table:113
> @@ +112,3 @@
> +template <class _Key>
> +struct __extract_key<_Key, _Key> {
> +  const _Key &operator()(const _Key &__key) { return __key; }
> ----------------
> Please keep the `__can_extract_key` and `__extract_key`  specializations 
> together. \

I'm fine either way, but I thought it would scale better (as we
add more of these) to have each `__can_extract_key` paired with
its corresponding `__extract_key`.

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to