Skip to content
  • Douglas Gregor's avatar
    Improve support for out-of-line definitions of nested templates and · e861bac0
    Douglas Gregor authored
    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
    e861bac0
Loading