Re: [PATCH] D18938: is_integral_or_enum ❥ enum class ⇒ hashable enum class

JF Bastien via llvm-commits llvm-commits at lists.llvm.org
Sat Apr 9 13:31:45 PDT 2016


jfb added a comment.

In http://reviews.llvm.org/D18938#396373, @jfb wrote:

> In http://reviews.llvm.org/D18938#396364, @dberlin wrote:
>
> > This looks better than the hackery i came up with, so LGTM :)
> >
> > One nit in case we want to care:
> >
> > +  return ::llvm::hashing::detail::hash_integer_value((uint64_t)value);
> >
> > So, you are guaranteed this value is either an enum, *or* convertible to
> >  unsigned long long.
> >
> > But what is the enum is not an unsigned type?
> >
> > IE will this not still trigger on:
> >
> > enum class e2: int {};
> >
> > ?
> >
> > I know these are all just hash values, so who cares, but in practice, you
> >  may just want to use an explicit cast to  std::underlying_type instead of
> >  uint64_t.
> >  or something.  Again, my C++ knowledge mostly died after C++98, so not sure
> >  what the "right" answer is here.
>
>
> I was being a bit lazy because the signature is `hash_code hash_integer_value(uint64_t value)`, but you're right using `underlying_type` is probably better if `hash_integer_value`'s input type were to change.
>
> Fixed that.


Well that was slightly broken, but not locally. I did a quick fix for the bots in http://reviews.llvm.org/rL265880, will ponder a yet-more-correct one.


Repository:
  rL LLVM

http://reviews.llvm.org/D18938





More information about the llvm-commits mailing list