Author: Evgeny Mandrikov Date: 2022-01-13T12:55:16+01:00 New Revision: 971bd6f83440701cf95047b0f4e2baf75cd31c48
URL: https://github.com/llvm/llvm-project/commit/971bd6f83440701cf95047b0f4e2baf75cd31c48 DIFF: https://github.com/llvm/llvm-project/commit/971bd6f83440701cf95047b0f4e2baf75cd31c48.diff LOG: Fix build failure with MSVC in C++20 mode Without this patch when using CMAKE_CXX_STANDARD=20 and MSVC 19.30.30705.0 compilation fails with clang\lib\Tooling\Syntax\Tree.cpp(347): error C2666: 'clang::syntax::Tree::ChildIteratorBase<clang::syntax::Tree::ChildIterator,clang::syntax::Node>::operator ==': 4 overloads have similar conversions clang\lib\Tooling\Syntax\Tree.cpp(392): error C2666: 'clang::syntax::Tree::ChildIteratorBase<clang::syntax::Tree::ChildIterator,clang::syntax::Node>::operator ==': 4 overloads have similar conversions Note that removed comment that "iterator_facade_base requires == to be a member" was made obsolete by change https://reviews.llvm.org/D78938 Reviewed By: sammccall Differential Revision: https://reviews.llvm.org/D116904 Added: Modified: clang/include/clang/Tooling/Syntax/Tree.h Removed: ################################################################################ diff --git a/clang/include/clang/Tooling/Syntax/Tree.h b/clang/include/clang/Tooling/Syntax/Tree.h index a3e0a2f598f87..2063c6b7d82a9 100644 --- a/clang/include/clang/Tooling/Syntax/Tree.h +++ b/clang/include/clang/Tooling/Syntax/Tree.h @@ -181,7 +181,10 @@ class Tree : public Node { ChildIteratorBase() = default; explicit ChildIteratorBase(NodeT *N) : N(N) {} - bool operator==(const DerivedT &O) const { return O.N == N; } + friend bool operator==(const DerivedT &LHS, const DerivedT &RHS) { + return LHS.N == RHS.N; + } + NodeT &operator*() const { return *N; } DerivedT &operator++() { N = N->getNextSibling(); @@ -269,14 +272,6 @@ class Tree : public Node { Node *LastChild = nullptr; }; -// Provide missing non_const == const overload. -// iterator_facade_base requires == to be a member, but implicit conversions -// don't work on the LHS of a member operator. -inline bool operator==(const Tree::ConstChildIterator &A, - const Tree::ConstChildIterator &B) { - return A.operator==(B); -} - /// A list of Elements separated or terminated by a fixed token. /// /// This type models the following grammar construct: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits