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