diff options
author | Anders Carlsson <andersca@mac.com> | 2009-08-28 15:18:15 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-08-28 15:18:15 +0000 |
commit | 0dde18e5a713bc186062ca1ebc9967500b07faee (patch) | |
tree | 05b6aadc5356f7902fd9391c9ffcc29fbdc00213 /lib/Sema/SemaTemplateInstantiateDecl.cpp | |
parent | 4fc7ab364110d6ad1c10dd38dbeb0597fed7e2f5 (diff) |
Instantiate unresolved using declarations.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80366 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/SemaTemplateInstantiateDecl.cpp')
-rw-r--r-- | lib/Sema/SemaTemplateInstantiateDecl.cpp | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/Sema/SemaTemplateInstantiateDecl.cpp b/lib/Sema/SemaTemplateInstantiateDecl.cpp index 0bf832f3eb..4f9fcc3b9e 100644 --- a/lib/Sema/SemaTemplateInstantiateDecl.cpp +++ b/lib/Sema/SemaTemplateInstantiateDecl.cpp @@ -58,7 +58,8 @@ namespace { Decl *VisitClassTemplateDecl(ClassTemplateDecl *D); Decl *VisitFunctionTemplateDecl(FunctionTemplateDecl *D); Decl *VisitTemplateTypeParmDecl(TemplateTypeParmDecl *D); - + Decl *VisitUnresolvedUsingDecl(UnresolvedUsingDecl *D); + // Base case. FIXME: Remove once we can instantiate everything. Decl *VisitDecl(Decl *) { assert(false && "Template instantiation of unknown declaration kind!"); @@ -740,6 +741,24 @@ Decl *TemplateDeclInstantiator::VisitTemplateTypeParmDecl( return Inst; } +Decl * +TemplateDeclInstantiator::VisitUnresolvedUsingDecl(UnresolvedUsingDecl *D) { + NestedNameSpecifier *NNS = + SemaRef.SubstNestedNameSpecifier(D->getTargetNestedNameSpecifier(), + D->getTargetNestedNameRange(), + TemplateArgs); + if (!NNS) + return 0; + + CXXScopeSpec SS; + SS.setRange(D->getTargetNestedNameRange()); + SS.setScopeRep(NNS); + + return SemaRef.BuildUsingDeclaration(D->getLocation(), SS, + D->getTargetNameLocation(), + D->getTargetName(), 0, D->isTypeName()); +} + Decl *Sema::SubstDecl(Decl *D, DeclContext *Owner, const TemplateArgumentList &TemplateArgs) { TemplateDeclInstantiator Instantiator(*this, Owner, TemplateArgs); |