summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaTemplate/nested-template.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Implement template instantiation for non-type templateDouglas Gregor2009-10-231-0/+7
| | | | | | parameters. Fixes PR5103. llvm-svn: 84979
* When re-entering a template scope, we may be entering a class templateDouglas Gregor2009-09-101-0/+10
| | | | | | | partial specialization rather than a subclass of TemplateDecl. Fixes a crash in libstdc++ 4.2's <map>. llvm-svn: 81407
* Improve diagnostics and recovery when the nested-name-specifier of aDouglas Gregor2009-08-261-0/+4
| | | | | | | | | | | | qualified name does not actually refer into a class/class template/class template partial specialization. Improve printing of nested-name-specifiers to eliminate redudant qualifiers. Also, make it possible to output a nested-name-specifier through a DiagnosticBuilder, although there are relatively few places that will use this leeway. llvm-svn: 80056
* Test out-of-line definition of a static data member of a member class of a ↵Douglas Gregor2009-08-251-0/+6
| | | | | | nested class template. Phew llvm-svn: 80046
* Test out-of-line definitions of static data members of nested member class ↵Douglas Gregor2009-08-251-0/+11
| | | | | | templates llvm-svn: 80045
* Improve support for out-of-line definitions of nested templates andDouglas Gregor2009-08-251-5/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | their members, including member class template, member function templates, and member classes and functions of member templates. To actually parse the nested-name-specifiers that qualify the name of an out-of-line definition of a member template, e.g., template<typename X> template<typename Y> X Outer<X>::Inner1<Y>::foo(Y) { return X(); } we need to look for the template names (e.g., "Inner1") as a member of the current instantiation (Outer<X>), even before we have entered the scope of the current instantiation. Since we can't do this in general (i.e., we should not be looking into all dependent nested-name-specifiers as if they were the current instantiation), we rely on the parser to tell us when it is parsing a declaration specifier sequence, and, therefore, when we should consider the current scope specifier to be a current instantiation. Printing of complicated, dependent nested-name-specifiers may be somewhat broken by this commit; I'll add tests for this issue and fix the problem (if it still exists) in a subsequent commit. llvm-svn: 80044
* Implement out-of-line definitions of nested class templates. Most ofDouglas Gregor2009-08-251-7/+46
| | | | | | | | | the logic is there for out-of-line definitions with multiple levels of nested templates, but this is still a work-in-progress: we're having trouble determining when we should look into a dependent nested-name-specifier. llvm-svn: 80003
* Keep track of the template parameter depth properly when we haveDouglas Gregor2009-08-241-0/+14
| | | | | | | | | | member templates declared inside other templates. This allows us to match out-of-line definitions of member function templates within class templates to the declarations within the class template. We still can't handle out-of-line definitions for member class templates, however. llvm-svn: 79955
* Diagnose class members that shadow a template parameter. FixesDouglas Gregor2009-06-171-1/+1
| | | | | | | | | | <rdar://problem/6952203>. To do this, we actually remove a not-quite-correct optimization in the C++ name lookup routines. We'll revisit this optimization for the general case once more C++ is working. llvm-svn: 73659
* Tests and fixes for templates declared within (non-template)Douglas Gregor2009-03-271-0/+16
classes. Test case from Anders Carlsson, fix from Piotr Rak! llvm-svn: 67817
OpenPOWER on IntegriCloud