static ExprResult buildOperatorCoawaitLookupExpr(Sema &SemaRef, Scope *S, SourceLocation Loc) { DeclarationName OpName = SemaRef.Context.DeclarationNames.getCXXOperatorName(OO_Coawait); LookupResult Operators(SemaRef, OpName, SourceLocation(), Sema::LookupOperatorName); SemaRef.LookupName(Operators, S); assert(!Operators.isAmbiguous() && "Operator lookup cannot be ambiguous"); const auto &Functions = Operators.asUnresolvedSet(); bool IsOverloaded = Functions.size() > 1 || (Functions.size() == 1 && isa<FunctionTemplateDecl>(*Functions.begin())); Expr *CoawaitOp = UnresolvedLookupExpr::Create( SemaRef.Context, /*NamingClass*/ nullptr, NestedNameSpecifierLoc(), DeclarationNameInfo(OpName, Loc), /*RequiresADL*/ true, IsOverloaded, Functions.begin(), Functions.end()); assert(CoawaitOp); return CoawaitOp; }