@@ -349,7 +349,10 @@ class Callback : public clang::ast_matchers::MatchFinder::MatchCallback {
349349 createTemplateArguments (clang::TemplateDecl *decl,
350350 llvm::SmallVectorImpl<clang::TemplateArgument> &out) {
351351 for (clang::NamedDecl *param : *decl->getTemplateParameters ()) {
352- if (llvm::isa<clang::TemplateTypeParmDecl>(param)) {
352+ if (param->isTemplateParameterPack ()) {
353+ out.emplace_back (
354+ clang::TemplateArgument::CreatePackCopy (sema_->Context , {}));
355+ } else if (llvm::isa<clang::TemplateTypeParmDecl>(param)) {
353356 clang::RecordDecl *rdecl = createRecordDecl (param->getName ());
354357 clang::QualType type =
355358 sema_->Context .getTagType (clang::ElaboratedTypeKeyword::None,
@@ -409,7 +412,14 @@ class Callback : public clang::ast_matchers::MatchFinder::MatchCallback {
409412 clang::OverloadCandidateSet &candidates) {
410413 clang::LookupResult decls (*sema_, name, loc_,
411414 clang::Sema::LookupOrdinaryName);
412- sema_->LookupQualifiedName (decls, sema_->getStdNamespace ());
415+ if (clang::NamespaceDecl *std_ns = sema_->getStdNamespace ()) {
416+ sema_->LookupQualifiedName (decls, std_ns);
417+ }
418+ if (decls.empty ()) {
419+ decls.clear ();
420+ sema_->LookupQualifiedName (decls,
421+ sema_->Context .getTranslationUnitDecl ());
422+ }
413423 for (auto *ndecl : decls) {
414424 if (auto *candidate = createCandidate (ndecl, callArgs, explicitTArgs)) {
415425 sema_->AddOverloadCandidate (
@@ -573,6 +583,7 @@ class Callback : public clang::ast_matchers::MatchFinder::MatchCallback {
573583 cxxConstructorNameLookup (rule->getReturnType (), callArgs, candidates);
574584 break ;
575585 case LookupKind::ADL :
586+ regularNameLookup (callArgs, &explicitTArgs, name, candidates);
576587 adlLookup (callArgs, name, candidates);
577588 break ;
578589 }
0 commit comments