diff --git a/include/clang/AST/TemplateBase.h b/include/clang/AST/TemplateBase.h
index 5c7dae0..6ea4e3b 100644
--- a/include/clang/AST/TemplateBase.h
+++ b/include/clang/AST/TemplateBase.h
@@ -191,6 +191,12 @@
       getAsIntegral()->~APSInt();
   }
 
+  /// \brief Create a new template argument pack by copying the given set of
+  /// template arguments.
+  static TemplateArgument CreatePackCopy(ASTContext &Context,
+                                         const TemplateArgument *Args,
+                                         unsigned NumArgs);
+  
   /// \brief Return the kind of stored template argument.
   ArgKind getKind() const { return (ArgKind)Kind; }
 
diff --git a/lib/AST/DeclTemplate.cpp b/lib/AST/DeclTemplate.cpp
index b7a586c..6e08854 100644
--- a/lib/AST/DeclTemplate.cpp
+++ b/lib/AST/DeclTemplate.cpp
@@ -338,11 +338,8 @@
       Arg = TemplateArgument(TemplateName(TTP), TTP->isParameterPack());
     }
     
-    if ((*Param)->isTemplateParameterPack()) {
-      TemplateArgument *Pack = new (Context) TemplateArgument [1];
-      *Pack = Arg;
-      Arg = TemplateArgument(Pack, 1);
-    }
+    if ((*Param)->isTemplateParameterPack())
+      Arg = TemplateArgument::CreatePackCopy(Context, &Arg, 1);
     
     TemplateArgs.push_back(Arg);
   }
diff --git a/lib/AST/TemplateBase.cpp b/lib/AST/TemplateBase.cpp
index 68e2332..6d6fee6 100644
--- a/lib/AST/TemplateBase.cpp
+++ b/lib/AST/TemplateBase.cpp
@@ -21,6 +21,7 @@
 #include "clang/AST/TypeLoc.h"
 #include "clang/Basic/Diagnostic.h"
 #include "llvm/ADT/FoldingSet.h"
+#include <algorithm>
 
 using namespace clang;
 
@@ -28,6 +29,17 @@
 // TemplateArgument Implementation
 //===----------------------------------------------------------------------===//
 
+TemplateArgument TemplateArgument::CreatePackCopy(ASTContext &Context,
+                                                  const TemplateArgument *Args,
+                                                  unsigned NumArgs) {
+  if (NumArgs == 0)
+    return TemplateArgument(0, 0);
+  
+  TemplateArgument *Storage = new (Context) TemplateArgument [NumArgs];
+  std::copy(Args, Args + NumArgs, Storage);
+  return TemplateArgument(Storage, NumArgs);
+}
+
 bool TemplateArgument::isDependent() const {
   switch (getKind()) {
   case Null:
diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp
index d0899c8..0a319b1 100644
--- a/lib/Sema/SemaTemplate.cpp
+++ b/lib/Sema/SemaTemplate.cpp
@@ -2556,13 +2556,12 @@
     if ((*Param)->isTemplateParameterPack()) {     
       if (PartialTemplateArgs && ArgumentPack.empty()) {
         Converted.push_back(TemplateArgument());
-      } else if (ArgumentPack.empty()) {
+      } else if (ArgumentPack.empty())
         Converted.push_back(TemplateArgument(0, 0));
-      } else {
-        TemplateArgument *PackedArgs
-          = new (Context) TemplateArgument [ArgumentPack.size()];
-        std::copy(ArgumentPack.begin(), ArgumentPack.end(), PackedArgs);
-        Converted.push_back(TemplateArgument(PackedArgs, ArgumentPack.size()));
+      else {
+        Converted.push_back(TemplateArgument::CreatePackCopy(Context, 
+                                                          ArgumentPack.data(), 
+                                                         ArgumentPack.size()));
         ArgumentPack.clear();
       }
     }
diff --git a/lib/Sema/SemaTemplateDeduction.cpp b/lib/Sema/SemaTemplateDeduction.cpp
index dcc1ada..ff76992 100644
--- a/lib/Sema/SemaTemplateDeduction.cpp
+++ b/lib/Sema/SemaTemplateDeduction.cpp
@@ -585,13 +585,13 @@
       NewPack = DeducedTemplateArgument(TemplateArgument(0, 0));
     } else {
       TemplateArgument *ArgumentPack
-      = new (S.Context) TemplateArgument [NewlyDeducedPacks[I].size()];
+        = new (S.Context) TemplateArgument [NewlyDeducedPacks[I].size()];
       std::copy(NewlyDeducedPacks[I].begin(), NewlyDeducedPacks[I].end(),
                 ArgumentPack);
       NewPack
-      = DeducedTemplateArgument(TemplateArgument(ArgumentPack,
-                                                 NewlyDeducedPacks[I].size()),
-                                NewlyDeducedPacks[I][0].wasDeducedFromArrayBound());        
+        = DeducedTemplateArgument(TemplateArgument(ArgumentPack,
+                                                   NewlyDeducedPacks[I].size()),
+                            NewlyDeducedPacks[I][0].wasDeducedFromArrayBound());        
     }
     
     DeducedTemplateArgument Result
@@ -1726,12 +1726,9 @@
     }
     
     // Create the resulting argument pack.
-    TemplateArgument *PackedArgs = 0;
-    if (!PackedArgsBuilder.empty()) {
-      PackedArgs = new (S.Context) TemplateArgument[PackedArgsBuilder.size()];
-      std::copy(PackedArgsBuilder.begin(), PackedArgsBuilder.end(), PackedArgs);
-    }
-    Output.push_back(TemplateArgument(PackedArgs, PackedArgsBuilder.size()));
+    Output.push_back(TemplateArgument::CreatePackCopy(S.Context, 
+                                                      PackedArgsBuilder.data(),
+                                                     PackedArgsBuilder.size()));
     return false;
   }
   
