From dd096d888b04c192b3bd8e0fd6ba7966c667f2d8 Mon Sep 17 00:00:00 2001
From: Anders Carlsson <andersca@mac.com>
Date: Fri, 5 Jun 2009 02:12:32 +0000
Subject: [PATCH] Fix a case when the TemplateArgs vector can be empty.

llvm-svn: 72911
---
 clang/lib/Sema/SemaTemplate.cpp               | 2 +-
 clang/test/SemaTemplate/default-arguments.cpp | 3 +++
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp
index dede3bba7502..c9277aab7525 100644
--- a/clang/lib/Sema/SemaTemplate.cpp
+++ b/clang/lib/Sema/SemaTemplate.cpp
@@ -2271,7 +2271,7 @@ Sema::ActOnExplicitInstantiation(Scope *S, SourceLocation TemplateLoc,
   // template.
   llvm::SmallVector<TemplateArgument, 16> ConvertedTemplateArgs;
   if (CheckTemplateArgumentList(ClassTemplate, TemplateNameLoc, LAngleLoc, 
-                                &TemplateArgs[0], TemplateArgs.size(),
+                                TemplateArgs.data(), TemplateArgs.size(),
                                 RAngleLoc, ConvertedTemplateArgs))
     return true;
 
diff --git a/clang/test/SemaTemplate/default-arguments.cpp b/clang/test/SemaTemplate/default-arguments.cpp
index 572227cb61de..0e4c36609dc1 100644
--- a/clang/test/SemaTemplate/default-arguments.cpp
+++ b/clang/test/SemaTemplate/default-arguments.cpp
@@ -10,3 +10,6 @@ X<> *x3; // expected-error{{too few template arguments for class template 'X'}}
 template<typename U = float, int M> struct X;
 
 X<> *x4;
+
+template<typename T = int> struct Z;
+template struct Z<>;