Author: Kazu Hirata Date: 2025-04-27T17:56:26-07:00 New Revision: ed3c8702a2582d4a8bbd9a292f6a191c0a656775
URL: https://github.com/llvm/llvm-project/commit/ed3c8702a2582d4a8bbd9a292f6a191c0a656775 DIFF: https://github.com/llvm/llvm-project/commit/ed3c8702a2582d4a8bbd9a292f6a191c0a656775.diff LOG: [ASTMatchers] Use llvm::is_detected (NFC) (#137560) Added: Modified: clang/include/clang/ASTMatchers/ASTMatchersInternal.h clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp Removed: ################################################################################ diff --git a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h index c1130ff70cf5c..8290645768aa9 100644 --- a/clang/include/clang/ASTMatchers/ASTMatchersInternal.h +++ b/clang/include/clang/ASTMatchers/ASTMatchersInternal.h @@ -881,20 +881,12 @@ inline bool isDefaultedHelper(const FunctionDecl *FD) { } // Metafunction to determine if type T has a member called getDecl. -template <typename Ty> -class has_getDecl { - using yes = char[1]; - using no = char[2]; - - template <typename Inner> - static yes& test(Inner *I, decltype(I->getDecl()) * = nullptr); - - template <typename> - static no& test(...); +template <typename T> +using check_has_getDecl = decltype(std::declval<T &>().getDecl()); -public: - static const bool value = sizeof(test<Ty>(nullptr)) == sizeof(yes); -}; +template <typename T> +static constexpr bool has_getDecl = + llvm::is_detected<check_has_getDecl, T>::value; /// Matches overloaded operators with a specific name. /// diff --git a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp index 74844167d5e5a..8759811092b6f 100644 --- a/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp +++ b/clang/unittests/ASTMatchers/ASTMatchersTraversalTest.cpp @@ -226,11 +226,11 @@ TEST(HasDeclaration, HasDeclarationOfEnumType) { } TEST(HasDeclaration, HasGetDeclTraitTest) { - static_assert(internal::has_getDecl<TypedefType>::value, + static_assert(internal::has_getDecl<TypedefType>, "Expected TypedefType to have a getDecl."); - static_assert(internal::has_getDecl<RecordType>::value, + static_assert(internal::has_getDecl<RecordType>, "Expected RecordType to have a getDecl."); - static_assert(!internal::has_getDecl<TemplateSpecializationType>::value, + static_assert(!internal::has_getDecl<TemplateSpecializationType>, "Expected TemplateSpecializationType to *not* have a getDecl."); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits