]> granicus.if.org Git - clang/commit
The injected-class-name of class templates and class template
authorDouglas Gregor <dgregor@apple.com>
Thu, 26 Mar 2009 00:10:35 +0000 (00:10 +0000)
committerDouglas Gregor <dgregor@apple.com>
Thu, 26 Mar 2009 00:10:35 +0000 (00:10 +0000)
commitbefc20e1dc869edb0e7b560e69f32d5c71f867ab
treecc632d95aec3f7ff8a85e7f01fe420acab35ce6b
parent1329c274628cc8c4e8ad472b41d1a78c8123f611
The injected-class-name of class templates and class template
specializations can be treated as a template. Finally, we can parse
and process the first implementation of Fibonacci I wrote!

Note that this code does not handle all of the cases where
injected-class-names can be treated as templates. In particular,
there's an ambiguity case that we should be able to handle (but
can't), e.g.,

  template <class T> struct Base { };
  template <class T> struct Derived : Base<int>, Base<char> {
    typename Derived::Base b;       // error: ambiguous
    typename Derived::Base<double> d;  // OK
  };

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67720 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/ASTContext.h
lib/Sema/SemaDecl.cpp
lib/Sema/SemaTemplate.cpp
lib/Sema/SemaTemplateInstantiateDecl.cpp
test/SemaTemplate/fibonacci.cpp
test/SemaTemplate/injected-class-name.cpp [new file with mode: 0644]