Improve parsing of template arguments to lay the foundation for
handling template template parameters properly. This refactoring:

  - Parses template template arguments as id-expressions, representing
    the result of the parse as a template name (Action::TemplateTy)
    rather than as an expression (lame!).

  - Represents all parsed template arguments via a new parser-specific
    type, ParsedTemplateArgument, which stores the kind of template
    argument (type, non-type, template) along with all of the source
    information about the template argument. This replaces an ad hoc
    set of 3 vectors (one for a void*, which was either a type or an
    expression; one for a bit telling whether the first was a type or
    an expression; and one for a single source location pointing at
    the template argument).

  - Moves TemplateIdAnnotation into the new Parse/Template.h. It never
    belonged in the Basic library anyway.

llvm-svn: 86708
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp
index ec6ca2a..c29cfb7 100644
--- a/clang/lib/Sema/SemaExpr.cpp
+++ b/clang/lib/Sema/SemaExpr.cpp
@@ -25,6 +25,7 @@
 #include "clang/Parse/DeclSpec.h"
 #include "clang/Parse/Designator.h"
 #include "clang/Parse/Scope.h"
+#include "clang/Parse/Template.h"
 using namespace clang;
 
 
@@ -622,14 +623,12 @@
   if (Name.getKind() == UnqualifiedId::IK_TemplateId) {
     ASTTemplateArgsPtr TemplateArgsPtr(*this,
                                        Name.TemplateId->getTemplateArgs(),
-                                       Name.TemplateId->getTemplateArgIsType(),
                                        Name.TemplateId->NumArgs);
     return ActOnTemplateIdExpr(SS, 
                                TemplateTy::make(Name.TemplateId->Template), 
                                Name.TemplateId->TemplateNameLoc,
                                Name.TemplateId->LAngleLoc,
                                TemplateArgsPtr,
-                               Name.TemplateId->getTemplateArgLocations(),
                                Name.TemplateId->RAngleLoc);
   }
   
@@ -2501,12 +2500,10 @@
     // Translate the parser's template argument list in our AST format.
     ASTTemplateArgsPtr TemplateArgsPtr(*this,
                                        Member.TemplateId->getTemplateArgs(),
-                                       Member.TemplateId->getTemplateArgIsType(),
                                        Member.TemplateId->NumArgs);
     
     llvm::SmallVector<TemplateArgumentLoc, 16> TemplateArgs;
     translateTemplateArguments(TemplateArgsPtr, 
-                               Member.TemplateId->getTemplateArgLocations(),
                                TemplateArgs);
     TemplateArgsPtr.release();