diff --git a/llvm/include/llvm/ADT/DenseMapInfo.h b/llvm/include/llvm/ADT/DenseMapInfo.h index ec7a116856bb4..717156c4bd196 100644 --- a/llvm/include/llvm/ADT/DenseMapInfo.h +++ b/llvm/include/llvm/ADT/DenseMapInfo.h @@ -179,41 +179,35 @@ template struct DenseMapInfo> { return Tuple(DenseMapInfo::getTombstoneKey()...); } - template - static unsigned getHashValueImpl(const Tuple &values, std::false_type) { - using EltType = std::tuple_element_t; - std::integral_constant atEnd; - return detail::combineHashValue( - DenseMapInfo::getHashValue(std::get(values)), - getHashValueImpl(values, atEnd)); - } - - template - static unsigned getHashValueImpl(const Tuple &, std::true_type) { - return 0; + template static unsigned getHashValueImpl(const Tuple &values) { + if constexpr (I == sizeof...(Ts)) + return 0; + else { + using EltType = std::tuple_element_t; + return detail::combineHashValue( + DenseMapInfo::getHashValue(std::get(values)), + getHashValueImpl(values)); + } } static unsigned getHashValue(const std::tuple &values) { - std::integral_constant atEnd; - return getHashValueImpl<0>(values, atEnd); + return getHashValueImpl<0>(values); } template - static bool isEqualImpl(const Tuple &lhs, const Tuple &rhs, std::false_type) { - using EltType = std::tuple_element_t; - std::integral_constant atEnd; - return DenseMapInfo::isEqual(std::get(lhs), std::get(rhs)) && - isEqualImpl(lhs, rhs, atEnd); - } - - template - static bool isEqualImpl(const Tuple &, const Tuple &, std::true_type) { - return true; + static bool isEqualImpl(const Tuple &lhs, const Tuple &rhs) { + if constexpr (I == sizeof...(Ts)) + return true; + else { + using EltType = std::tuple_element_t; + return DenseMapInfo::isEqual(std::get(lhs), + std::get(rhs)) && + isEqualImpl(lhs, rhs); + } } static bool isEqual(const Tuple &lhs, const Tuple &rhs) { - std::integral_constant atEnd; - return isEqualImpl<0>(lhs, rhs, atEnd); + return isEqualImpl<0>(lhs, rhs); } };