]> granicus.if.org Git - clang/commit
Implement the semantics of the injected-class-name within a class
authorDouglas Gregor <dgregor@apple.com>
Sun, 10 May 2009 22:57:19 +0000 (22:57 +0000)
committerDouglas Gregor <dgregor@apple.com>
Sun, 10 May 2009 22:57:19 +0000 (22:57 +0000)
commit7da97d0f31e1ec16998d3de2cfd2e88fe3736673
treeb02158638458d3b80d52e441baab194451072e77
parent0393e285fd621c02a3f4a341bbb5c1ae4c5946d5
Implement the semantics of the injected-class-name within a class
template. The injected-class-name is either a type or a template,
depending on whether a '<' follows it. As a type, the
injected-class-name's template argument list contains its template
parameters in declaration order.

As part of this, add logic for canonicalizing declarations, and be
sure to canonicalize declarations used in template names and template
arguments.

A TagType is dependent if the declaration it references is dependent.

I'm not happy about the rather complicated protocol needed to use
ASTContext::getTemplateSpecializationType.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71408 91177308-0d34-0410-b5e6-96231b3b80d8
12 files changed:
include/clang/AST/ASTContext.h
include/clang/AST/Decl.h
include/clang/AST/DeclTemplate.h
include/clang/AST/Type.h
lib/AST/ASTContext.cpp
lib/AST/Decl.cpp
lib/AST/DeclTemplate.cpp
lib/AST/Type.cpp
lib/Sema/SemaDecl.cpp
lib/Sema/SemaTemplate.cpp
lib/Sema/SemaTemplateInstantiateDecl.cpp
test/SemaTemplate/injected-class-name.cpp