[clang] 971bd6f - Fix build failure with MSVC in C++20 mode
Sam McCall via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 13 03:55:33 PST 2022
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:
More information about the cfe-commits
mailing list