From e861bac059d598cba212b4ca447339af11fbc44e Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Tue, 25 Aug 2009 22:51:20 +0000 Subject: Improve support for out-of-line definitions of nested templates and 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 template X Outer::Inner1::foo(Y) { return X(); } we need to look for the template names (e.g., "Inner1") as a member of the current instantiation (Outer), 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 --- clang/lib/Parse/MinimalAction.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'clang/lib/Parse/MinimalAction.cpp') diff --git a/clang/lib/Parse/MinimalAction.cpp b/clang/lib/Parse/MinimalAction.cpp index 648e2da54bf..6c8d75c2d6d 100644 --- a/clang/lib/Parse/MinimalAction.cpp +++ b/clang/lib/Parse/MinimalAction.cpp @@ -159,8 +159,9 @@ bool MinimalAction::isCurrentClassName(const IdentifierInfo &, Scope *, TemplateNameKind MinimalAction::isTemplateName(const IdentifierInfo &II, Scope *S, - TemplateTy &TemplateDecl, - const CXXScopeSpec *SS) { + const CXXScopeSpec *SS, + bool EnteringScope, + TemplateTy &TemplateDecl) { return TNK_Non_template; } -- cgit v1.2.3