diff --git a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp --- a/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp +++ b/clang-tools-extra/clang-tidy/bugprone/DanglingHandleCheck.cpp @@ -27,7 +27,8 @@ return expr( anyOf(cxxConstructExpr(hasDeclaration(cxxMethodDecl(ofClass(IsAHandle))), hasArgument(0, Arg)), - cxxMemberCallExpr(hasType(cxxRecordDecl(IsAHandle)), + cxxMemberCallExpr(hasType(hasUnqualifiedDesugaredType(recordType( + hasDeclaration(cxxRecordDecl(IsAHandle))))), callee(memberExpr(member(cxxConversionDecl()))), on(Arg)))); } diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone-dangling-handle.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone-dangling-handle.cpp --- a/clang-tools-extra/test/clang-tidy/checkers/bugprone-dangling-handle.cpp +++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone-dangling-handle.cpp @@ -45,26 +45,30 @@ value_type& operator[](Key&& key); }; +template class basic_string_view; +template class basic_string { - public: +public: + typedef basic_string_view<_CharT> __self_view; basic_string(); basic_string(const char*); - operator basic_string_view() const noexcept; + operator __self_view() const noexcept; ~basic_string(); }; -typedef basic_string string; +typedef basic_string string; +template class basic_string_view { - public: +public: basic_string_view(const char*); }; -typedef basic_string_view string_view; +typedef basic_string_view string_view; } // namespace std