================ @@ -1269,19 +1269,19 @@ struct FindLocalExternScope { }; } // end anonymous namespace +static bool isDependentAssignmentOperator(DeclarationName Name, + DeclContext *LookupContext) { + auto *LookupRecord = dyn_cast_if_present<CXXRecordDecl>(LookupContext); + return Name.getCXXOverloadedOperator() == OO_Equal && LookupRecord && + !LookupRecord->isBeingDefined() && LookupRecord->isDependentContext(); ---------------- sdkrystian wrote:
The reason `operator=` is dependent when the current class is a templated entity is because each specialization declares its own set of special member functions, and according to [[special] p1](http://eel.is/c++draft/special#1.sentence-4), they are "declared at the closing `}` of the _class-specifier_". When instantiating a templated class, they are declared after all other member declarations are instantiated. If the lookup context is the current instantiation and the current instantiation is incomplete (e.g. because `operator=` is named outside a complete-class context), we will never find the implicitly declared copy/move assignment operators because they are always declared last (neither in the template definition context, nor in the template instantiation context). So, we just treat it like any other unqualified name during lookup. https://github.com/llvm/llvm-project/pull/91498 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits