Index: clang-tools-extra/trunk/clang-tidy/bugprone/DanglingHandleCheck.cpp =================================================================== --- clang-tools-extra/trunk/clang-tidy/bugprone/DanglingHandleCheck.cpp +++ clang-tools-extra/trunk/clang-tidy/bugprone/DanglingHandleCheck.cpp @@ -25,8 +25,12 @@ ast_matchers::internal::BindableMatcher handleFrom(const ast_matchers::internal::Matcher &IsAHandle, const ast_matchers::internal::Matcher &Arg) { - return cxxConstructExpr(hasDeclaration(cxxMethodDecl(ofClass(IsAHandle))), - hasArgument(0, Arg)); + return expr( + anyOf(cxxConstructExpr(hasDeclaration(cxxMethodDecl(ofClass(IsAHandle))), + hasArgument(0, Arg)), + cxxMemberCallExpr(hasType(cxxRecordDecl(IsAHandle)), + callee(memberExpr(member(cxxConversionDecl()))), + on(Arg)))); } ast_matchers::internal::Matcher handleFromTemporaryValue( Index: clang-tools-extra/trunk/test/clang-tidy/bugprone-dangling-handle.cpp =================================================================== --- clang-tools-extra/trunk/test/clang-tidy/bugprone-dangling-handle.cpp +++ clang-tools-extra/trunk/test/clang-tidy/bugprone-dangling-handle.cpp @@ -45,10 +45,15 @@ value_type& operator[](Key&& key); }; +class basic_string_view; + class basic_string { public: basic_string(); basic_string(const char*); + + operator basic_string_view() const noexcept; + ~basic_string(); }; @@ -57,7 +62,6 @@ class basic_string_view { public: basic_string_view(const char*); - basic_string_view(const basic_string&); }; typedef basic_string_view string_view;