summaryrefslogtreecommitdiffstats
path: root/clang/test/SemaTemplate/nested-template.cpp
Commit message (Collapse)AuthorAgeFilesLines
* Fix a couple of places where we assumed that non-type template parameters ↵Richard Smith2018-02-141-0/+7
| | | | | | are always rvalues. llvm-svn: 325095
* Add test.Eli Friedman2013-06-201-0/+1
| | | | llvm-svn: 184465
* Don't try to check override control for invalid member functions. Fixes a ↵Richard Smith2012-09-061-0/+5
| | | | | | crash in a corner case. Patch by Olivier Goffart! llvm-svn: 163337
* When we see an out-of-line definition of a member class template thatDouglas Gregor2011-11-011-0/+13
| | | | | | | does not match any declaration in the class (or class template), be sure to mark it as invalid. Fixes PR10924 / <rdar://problem/10119422>. llvm-svn: 143504
* Diagnose attempts to write a templated data member, from StepanDouglas Gregor2011-09-211-0/+16
| | | | | | Dyatkovskiy! Fixes PR10896. llvm-svn: 140250
* Update tests to use %clang_cc1 instead of 'clang-cc' or 'clang -cc1'.Daniel Dunbar2009-12-151-1/+1
| | | | | | | | | - This is designed to make it obvious that %clang_cc1 is a "test variable" which is substituted. It is '%clang_cc1' instead of '%clang -cc1' because it can be useful to redefine what gets run as 'clang -cc1' (for example, to set a default target). llvm-svn: 91446
* Before checking a template template argument against its correspondingDouglas Gregor2009-11-111-1/+1
| | | | | | | | | | | | | | | | | | | | | | | template template parameter, substitute any prior template arguments into the template template parameter. This, for example, allows us to properly check the template template argument for a class such as: template<typename T, template<T Value> class X> struct Foo; The actual implementation of this feature was trivial; most of the change is dedicated to giving decent diagnostics when this substitution goes horribly wrong. We now get a note like: note: while substituting prior template arguments into template template parameter 'X' [with T = float] As part of this change, enabled some very pedantic checking when comparing template template parameter lists, which shook out a bug in our overly-eager checking of default arguments of template template parameters. We now perform only minimal checking of such default arguments when they are initially parsed. llvm-svn: 86864
* Instantiation of template template parameters for nested templates, e.g.,Douglas Gregor2009-11-111-0/+18
| | | | | | | | | template<typename T> struct X { template<template<T Value> class Y> struct Inner; }; llvm-svn: 86844
* 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