Add support to the hashing infrastructure for automatically hashing both
authorChandler Carruth <chandlerc@gmail.com>
Wed, 7 Mar 2012 09:32:32 +0000 (09:32 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Wed, 7 Mar 2012 09:32:32 +0000 (09:32 +0000)
commitd4d8b2a7f6d29b44cbc084b49042f44ef109da0c
tree2379f511e58cd19cefab3f0b9906e7bcba31cc6f
parent5b2749abf585f9e28656c289001c2327eed401af
Add support to the hashing infrastructure for automatically hashing both
integral and enumeration types. This is accomplished with a bit of
template type trait magic. Thanks to Richard Smith for the core idea
here to detect viable types by detecting the set of types which can be
default constructed in a template parameter.

This is used (in conjunction with a system for detecting nullptr_t
should it exist) to provide an is_integral_or_enum type trait that
doesn't need a whitelist or direct compiler support.

With this, the hashing is extended to the more general facility. This
will be used in a subsequent commit to hashing more things, but I wanted
to make sure the type trait magic went through the build bots separately
in case other compilers don't like this formulation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@152217 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/ADT/Hashing.h
include/llvm/Support/type_traits.h
unittests/ADT/HashingTest.cpp