Implement template instantiation for member class templates.

When performing template instantiation of the definitions of member
templates (or members thereof),  we build a data structure containing
the template arguments from each "level" of template
instantiation. During template instantiation, we substitute all levels
of template arguments simultaneously. 



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80389 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp
index 44c5a3a..91c1fa5 100644
--- a/lib/Sema/SemaExpr.cpp
+++ b/lib/Sema/SemaExpr.cpp
@@ -2473,14 +2473,14 @@
       Expr *UninstExpr = Param->getUninstantiatedDefaultArg();
 
       // Instantiate the expression.
-      const TemplateArgumentList &ArgList = getTemplateInstantiationArgs(FD);
+      MultiLevelTemplateArgumentList ArgList = getTemplateInstantiationArgs(FD);
       
       // FIXME: We should really make a new InstantiatingTemplate ctor
       // that has a better message - right now we're just piggy-backing 
       // off the "default template argument" error message.
       InstantiatingTemplate Inst(*this, CallLoc, FD->getPrimaryTemplate(),
-                                 ArgList.getFlatArgumentList(),
-                                 ArgList.flat_size());
+                                 ArgList.getInnermost().getFlatArgumentList(),
+                                 ArgList.getInnermost().flat_size());
 
       OwningExprResult Result = SubstExpr(UninstExpr, ArgList);
       if (Result.isInvalid())