diff --git a/llvm/lib/IR/Metadata.cpp b/llvm/lib/IR/Metadata.cpp index fc78a5b299f49..09e25ceaf59c3 100644 --- a/llvm/lib/IR/Metadata.cpp +++ b/llvm/lib/IR/Metadata.cpp @@ -986,15 +986,10 @@ static T *uniquifyImpl(T *N, DenseSet &Store) { } template struct MDNode::HasCachedHash { - using Yes = char[1]; - using No = char[2]; - template struct SFINAE {}; - template - static Yes &check(SFINAE *); - template static No &check(...); + using check = decltype(static_cast(&U::setHash)); - static const bool value = sizeof(check(nullptr)) == sizeof(Yes); + static constexpr bool value = is_detected::value; }; MDNode *MDNode::uniquify() {