1 //===------- SemaTemplateDeduction.cpp - Template Argument Deduction ------===/
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //===----------------------------------------------------------------------===/
8 //
9 //  This file implements C++ template argument deduction.
10 //
11 //===----------------------------------------------------------------------===/
12 
13 #include "clang/Sema/TemplateDeduction.h"
14 #include "TreeTransform.h"
15 #include "clang/AST/ASTContext.h"
16 #include "clang/AST/DeclObjC.h"
17 #include "clang/AST/DeclTemplate.h"
18 #include "clang/AST/Expr.h"
19 #include "clang/AST/ExprCXX.h"
20 #include "clang/AST/StmtVisitor.h"
21 #include "clang/Sema/DeclSpec.h"
22 #include "clang/Sema/Sema.h"
23 #include "clang/Sema/Template.h"
24 #include "llvm/ADT/SmallBitVector.h"
25 #include <algorithm>
26 
27 namespace clang {
28   using namespace sema;
29 
30   /// \brief Various flags that control template argument deduction.
31   ///
32   /// These flags can be bitwise-OR'd together.
33   enum TemplateDeductionFlags {
34     /// \brief No template argument deduction flags, which indicates the
35     /// strictest results for template argument deduction (as used for, e.g.,
36     /// matching class template partial specializations).
37     TDF_None = 0,
38     /// \brief Within template argument deduction from a function call, we are
39     /// matching with a parameter type for which the original parameter was
40     /// a reference.
41     TDF_ParamWithReferenceType = 0x1,
42     /// \brief Within template argument deduction from a function call, we
43     /// are matching in a case where we ignore cv-qualifiers.
44     TDF_IgnoreQualifiers = 0x02,
45     /// \brief Within template argument deduction from a function call,
46     /// we are matching in a case where we can perform template argument
47     /// deduction from a template-id of a derived class of the argument type.
48     TDF_DerivedClass = 0x04,
49     /// \brief Allow non-dependent types to differ, e.g., when performing
50     /// template argument deduction from a function call where conversions
51     /// may apply.
52     TDF_SkipNonDependent = 0x08,
53     /// \brief Whether we are performing template argument deduction for
54     /// parameters and arguments in a top-level template argument
55     TDF_TopLevelParameterTypeList = 0x10
56   };
57 }
58 
59 using namespace clang;
60 
61 /// \brief Compare two APSInts, extending and switching the sign as
62 /// necessary to compare their values regardless of underlying type.
63 static bool hasSameExtendedValue(llvm::APSInt X, llvm::APSInt Y) {
64   if (Y.getBitWidth() > X.getBitWidth())
65     X = X.extend(Y.getBitWidth());
66   else if (Y.getBitWidth() < X.getBitWidth())
67     Y = Y.extend(X.getBitWidth());
68 
69   // If there is a signedness mismatch, correct it.
70   if (X.isSigned() != Y.isSigned()) {
71     // If the signed value is negative, then the values cannot be the same.
72     if ((Y.isSigned() && Y.isNegative()) || (X.isSigned() && X.isNegative()))
73       return false;
74 
75     Y.setIsSigned(true);
76     X.setIsSigned(true);
77   }
78 
79   return X == Y;
80 }
81 
82 static Sema::TemplateDeductionResult
83 DeduceTemplateArguments(Sema &S,
84                         TemplateParameterList *TemplateParams,
85                         const TemplateArgument &Param,
86                         TemplateArgument Arg,
87                         TemplateDeductionInfo &Info,
88                       SmallVectorImpl<DeducedTemplateArgument> &Deduced);
89 
90 /// \brief Whether template argument deduction for two reference parameters
91 /// resulted in the argument type, parameter type, or neither type being more
92 /// qualified than the other.
93 enum DeductionQualifierComparison {
94   NeitherMoreQualified = 0,
95   ParamMoreQualified,
96   ArgMoreQualified
97 };
98 
99 /// \brief Stores the result of comparing two reference parameters while
100 /// performing template argument deduction for partial ordering of function
101 /// templates.
102 struct RefParamPartialOrderingComparison {
103   /// \brief Whether the parameter type is an rvalue reference type.
104   bool ParamIsRvalueRef;
105   /// \brief Whether the argument type is an rvalue reference type.
106   bool ArgIsRvalueRef;
107 
108   /// \brief Whether the parameter or argument (or neither) is more qualified.
109   DeductionQualifierComparison Qualifiers;
110 };
111 
112 
113 
114 static Sema::TemplateDeductionResult
115 DeduceTemplateArgumentsByTypeMatch(Sema &S,
116                                    TemplateParameterList *TemplateParams,
117                                    QualType Param,
118                                    QualType Arg,
119                                    TemplateDeductionInfo &Info,
120                                    SmallVectorImpl<DeducedTemplateArgument> &
121                                                       Deduced,
122                                    unsigned TDF,
123                                    bool PartialOrdering = false,
124                             SmallVectorImpl<RefParamPartialOrderingComparison> *
125                                                       RefParamComparisons = 0);
126 
127 static Sema::TemplateDeductionResult
128 DeduceTemplateArguments(Sema &S,
129                         TemplateParameterList *TemplateParams,
130                         const TemplateArgument *Params, unsigned NumParams,
131                         const TemplateArgument *Args, unsigned NumArgs,
132                         TemplateDeductionInfo &Info,
133                         SmallVectorImpl<DeducedTemplateArgument> &Deduced);
134 
135 /// \brief If the given expression is of a form that permits the deduction
136 /// of a non-type template parameter, return the declaration of that
137 /// non-type template parameter.
138 static NonTypeTemplateParmDecl *getDeducedParameterFromExpr(Expr *E) {
139   // If we are within an alias template, the expression may have undergone
140   // any number of parameter substitutions already.
141   while (1) {
142     if (ImplicitCastExpr *IC = dyn_cast<ImplicitCastExpr>(E))
143       E = IC->getSubExpr();
144     else if (SubstNonTypeTemplateParmExpr *Subst =
145                dyn_cast<SubstNonTypeTemplateParmExpr>(E))
146       E = Subst->getReplacement();
147     else
148       break;
149   }
150 
151   if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E))
152     return dyn_cast<NonTypeTemplateParmDecl>(DRE->getDecl());
153 
154   return 0;
155 }
156 
157 /// \brief Determine whether two declaration pointers refer to the same
158 /// declaration.
159 static bool isSameDeclaration(Decl *X, Decl *Y) {
160   if (NamedDecl *NX = dyn_cast<NamedDecl>(X))
161     X = NX->getUnderlyingDecl();
162   if (NamedDecl *NY = dyn_cast<NamedDecl>(Y))
163     Y = NY->getUnderlyingDecl();
164 
165   return X->getCanonicalDecl() == Y->getCanonicalDecl();
166 }
167 
168 /// \brief Verify that the given, deduced template arguments are compatible.
169 ///
170 /// \returns The deduced template argument, or a NULL template argument if
171 /// the deduced template arguments were incompatible.
172 static DeducedTemplateArgument
173 checkDeducedTemplateArguments(ASTContext &Context,
174                               const DeducedTemplateArgument &X,
175                               const DeducedTemplateArgument &Y) {
176   // We have no deduction for one or both of the arguments; they're compatible.
177   if (X.isNull())
178     return Y;
179   if (Y.isNull())
180     return X;
181 
182   switch (X.getKind()) {
183   case TemplateArgument::Null:
184     llvm_unreachable("Non-deduced template arguments handled above");
185 
186   case TemplateArgument::Type:
187     // If two template type arguments have the same type, they're compatible.
188     if (Y.getKind() == TemplateArgument::Type &&
189         Context.hasSameType(X.getAsType(), Y.getAsType()))
190       return X;
191 
192     return DeducedTemplateArgument();
193 
194   case TemplateArgument::Integral:
195     // If we deduced a constant in one case and either a dependent expression or
196     // declaration in another case, keep the integral constant.
197     // If both are integral constants with the same value, keep that value.
198     if (Y.getKind() == TemplateArgument::Expression ||
199         Y.getKind() == TemplateArgument::Declaration ||
200         (Y.getKind() == TemplateArgument::Integral &&
201          hasSameExtendedValue(X.getAsIntegral(), Y.getAsIntegral())))
202       return DeducedTemplateArgument(X,
203                                      X.wasDeducedFromArrayBound() &&
204                                      Y.wasDeducedFromArrayBound());
205 
206     // All other combinations are incompatible.
207     return DeducedTemplateArgument();
208 
209   case TemplateArgument::Template:
210     if (Y.getKind() == TemplateArgument::Template &&
211         Context.hasSameTemplateName(X.getAsTemplate(), Y.getAsTemplate()))
212       return X;
213 
214     // All other combinations are incompatible.
215     return DeducedTemplateArgument();
216 
217   case TemplateArgument::TemplateExpansion:
218     if (Y.getKind() == TemplateArgument::TemplateExpansion &&
219         Context.hasSameTemplateName(X.getAsTemplateOrTemplatePattern(),
220                                     Y.getAsTemplateOrTemplatePattern()))
221       return X;
222 
223     // All other combinations are incompatible.
224     return DeducedTemplateArgument();
225 
226   case TemplateArgument::Expression:
227     // If we deduced a dependent expression in one case and either an integral
228     // constant or a declaration in another case, keep the integral constant
229     // or declaration.
230     if (Y.getKind() == TemplateArgument::Integral ||
231         Y.getKind() == TemplateArgument::Declaration)
232       return DeducedTemplateArgument(Y, X.wasDeducedFromArrayBound() &&
233                                      Y.wasDeducedFromArrayBound());
234 
235     if (Y.getKind() == TemplateArgument::Expression) {
236       // Compare the expressions for equality
237       llvm::FoldingSetNodeID ID1, ID2;
238       X.getAsExpr()->Profile(ID1, Context, true);
239       Y.getAsExpr()->Profile(ID2, Context, true);
240       if (ID1 == ID2)
241         return X;
242     }
243 
244     // All other combinations are incompatible.
245     return DeducedTemplateArgument();
246 
247   case TemplateArgument::Declaration:
248     // If we deduced a declaration and a dependent expression, keep the
249     // declaration.
250     if (Y.getKind() == TemplateArgument::Expression)
251       return X;
252 
253     // If we deduced a declaration and an integral constant, keep the
254     // integral constant.
255     if (Y.getKind() == TemplateArgument::Integral)
256       return Y;
257 
258     // If we deduced two declarations, make sure they they refer to the
259     // same declaration.
260     if (Y.getKind() == TemplateArgument::Declaration &&
261         isSameDeclaration(X.getAsDecl(), Y.getAsDecl()) &&
262         X.isDeclForReferenceParam() == Y.isDeclForReferenceParam())
263       return X;
264 
265     // All other combinations are incompatible.
266     return DeducedTemplateArgument();
267 
268   case TemplateArgument::NullPtr:
269     // If we deduced a null pointer and a dependent expression, keep the
270     // null pointer.
271     if (Y.getKind() == TemplateArgument::Expression)
272       return X;
273 
274     // If we deduced a null pointer and an integral constant, keep the
275     // integral constant.
276     if (Y.getKind() == TemplateArgument::Integral)
277       return Y;
278 
279     // If we deduced two null pointers, make sure they have the same type.
280     if (Y.getKind() == TemplateArgument::NullPtr &&
281         Context.hasSameType(X.getNullPtrType(), Y.getNullPtrType()))
282       return X;
283 
284     // All other combinations are incompatible.
285     return DeducedTemplateArgument();
286 
287   case TemplateArgument::Pack:
288     if (Y.getKind() != TemplateArgument::Pack ||
289         X.pack_size() != Y.pack_size())
290       return DeducedTemplateArgument();
291 
292     for (TemplateArgument::pack_iterator XA = X.pack_begin(),
293                                       XAEnd = X.pack_end(),
294                                          YA = Y.pack_begin();
295          XA != XAEnd; ++XA, ++YA) {
296       if (checkDeducedTemplateArguments(Context,
297                     DeducedTemplateArgument(*XA, X.wasDeducedFromArrayBound()),
298                     DeducedTemplateArgument(*YA, Y.wasDeducedFromArrayBound()))
299             .isNull())
300         return DeducedTemplateArgument();
301     }
302 
303     return X;
304   }
305 
306   llvm_unreachable("Invalid TemplateArgument Kind!");
307 }
308 
309 /// \brief Deduce the value of the given non-type template parameter
310 /// from the given constant.
311 static Sema::TemplateDeductionResult
312 DeduceNonTypeTemplateArgument(Sema &S,
313                               NonTypeTemplateParmDecl *NTTP,
314                               llvm::APSInt Value, QualType ValueType,
315                               bool DeducedFromArrayBound,
316                               TemplateDeductionInfo &Info,
317                     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
318   assert(NTTP->getDepth() == 0 &&
319          "Cannot deduce non-type template argument with depth > 0");
320 
321   DeducedTemplateArgument NewDeduced(S.Context, Value, ValueType,
322                                      DeducedFromArrayBound);
323   DeducedTemplateArgument Result = checkDeducedTemplateArguments(S.Context,
324                                                      Deduced[NTTP->getIndex()],
325                                                                  NewDeduced);
326   if (Result.isNull()) {
327     Info.Param = NTTP;
328     Info.FirstArg = Deduced[NTTP->getIndex()];
329     Info.SecondArg = NewDeduced;
330     return Sema::TDK_Inconsistent;
331   }
332 
333   Deduced[NTTP->getIndex()] = Result;
334   return Sema::TDK_Success;
335 }
336 
337 /// \brief Deduce the value of the given non-type template parameter
338 /// from the given type- or value-dependent expression.
339 ///
340 /// \returns true if deduction succeeded, false otherwise.
341 static Sema::TemplateDeductionResult
342 DeduceNonTypeTemplateArgument(Sema &S,
343                               NonTypeTemplateParmDecl *NTTP,
344                               Expr *Value,
345                               TemplateDeductionInfo &Info,
346                     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
347   assert(NTTP->getDepth() == 0 &&
348          "Cannot deduce non-type template argument with depth > 0");
349   assert((Value->isTypeDependent() || Value->isValueDependent()) &&
350          "Expression template argument must be type- or value-dependent.");
351 
352   DeducedTemplateArgument NewDeduced(Value);
353   DeducedTemplateArgument Result = checkDeducedTemplateArguments(S.Context,
354                                                      Deduced[NTTP->getIndex()],
355                                                                  NewDeduced);
356 
357   if (Result.isNull()) {
358     Info.Param = NTTP;
359     Info.FirstArg = Deduced[NTTP->getIndex()];
360     Info.SecondArg = NewDeduced;
361     return Sema::TDK_Inconsistent;
362   }
363 
364   Deduced[NTTP->getIndex()] = Result;
365   return Sema::TDK_Success;
366 }
367 
368 /// \brief Deduce the value of the given non-type template parameter
369 /// from the given declaration.
370 ///
371 /// \returns true if deduction succeeded, false otherwise.
372 static Sema::TemplateDeductionResult
373 DeduceNonTypeTemplateArgument(Sema &S,
374                               NonTypeTemplateParmDecl *NTTP,
375                               ValueDecl *D,
376                               TemplateDeductionInfo &Info,
377                     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
378   assert(NTTP->getDepth() == 0 &&
379          "Cannot deduce non-type template argument with depth > 0");
380 
381   D = D ? cast<ValueDecl>(D->getCanonicalDecl()) : 0;
382   TemplateArgument New(D, NTTP->getType()->isReferenceType());
383   DeducedTemplateArgument NewDeduced(New);
384   DeducedTemplateArgument Result = checkDeducedTemplateArguments(S.Context,
385                                                      Deduced[NTTP->getIndex()],
386                                                                  NewDeduced);
387   if (Result.isNull()) {
388     Info.Param = NTTP;
389     Info.FirstArg = Deduced[NTTP->getIndex()];
390     Info.SecondArg = NewDeduced;
391     return Sema::TDK_Inconsistent;
392   }
393 
394   Deduced[NTTP->getIndex()] = Result;
395   return Sema::TDK_Success;
396 }
397 
398 static Sema::TemplateDeductionResult
399 DeduceTemplateArguments(Sema &S,
400                         TemplateParameterList *TemplateParams,
401                         TemplateName Param,
402                         TemplateName Arg,
403                         TemplateDeductionInfo &Info,
404                     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
405   TemplateDecl *ParamDecl = Param.getAsTemplateDecl();
406   if (!ParamDecl) {
407     // The parameter type is dependent and is not a template template parameter,
408     // so there is nothing that we can deduce.
409     return Sema::TDK_Success;
410   }
411 
412   if (TemplateTemplateParmDecl *TempParam
413         = dyn_cast<TemplateTemplateParmDecl>(ParamDecl)) {
414     DeducedTemplateArgument NewDeduced(S.Context.getCanonicalTemplateName(Arg));
415     DeducedTemplateArgument Result = checkDeducedTemplateArguments(S.Context,
416                                                  Deduced[TempParam->getIndex()],
417                                                                    NewDeduced);
418     if (Result.isNull()) {
419       Info.Param = TempParam;
420       Info.FirstArg = Deduced[TempParam->getIndex()];
421       Info.SecondArg = NewDeduced;
422       return Sema::TDK_Inconsistent;
423     }
424 
425     Deduced[TempParam->getIndex()] = Result;
426     return Sema::TDK_Success;
427   }
428 
429   // Verify that the two template names are equivalent.
430   if (S.Context.hasSameTemplateName(Param, Arg))
431     return Sema::TDK_Success;
432 
433   // Mismatch of non-dependent template parameter to argument.
434   Info.FirstArg = TemplateArgument(Param);
435   Info.SecondArg = TemplateArgument(Arg);
436   return Sema::TDK_NonDeducedMismatch;
437 }
438 
439 /// \brief Deduce the template arguments by comparing the template parameter
440 /// type (which is a template-id) with the template argument type.
441 ///
442 /// \param S the Sema
443 ///
444 /// \param TemplateParams the template parameters that we are deducing
445 ///
446 /// \param Param the parameter type
447 ///
448 /// \param Arg the argument type
449 ///
450 /// \param Info information about the template argument deduction itself
451 ///
452 /// \param Deduced the deduced template arguments
453 ///
454 /// \returns the result of template argument deduction so far. Note that a
455 /// "success" result means that template argument deduction has not yet failed,
456 /// but it may still fail, later, for other reasons.
457 static Sema::TemplateDeductionResult
458 DeduceTemplateArguments(Sema &S,
459                         TemplateParameterList *TemplateParams,
460                         const TemplateSpecializationType *Param,
461                         QualType Arg,
462                         TemplateDeductionInfo &Info,
463                     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
464   assert(Arg.isCanonical() && "Argument type must be canonical");
465 
466   // Check whether the template argument is a dependent template-id.
467   if (const TemplateSpecializationType *SpecArg
468         = dyn_cast<TemplateSpecializationType>(Arg)) {
469     // Perform template argument deduction for the template name.
470     if (Sema::TemplateDeductionResult Result
471           = DeduceTemplateArguments(S, TemplateParams,
472                                     Param->getTemplateName(),
473                                     SpecArg->getTemplateName(),
474                                     Info, Deduced))
475       return Result;
476 
477 
478     // Perform template argument deduction on each template
479     // argument. Ignore any missing/extra arguments, since they could be
480     // filled in by default arguments.
481     return DeduceTemplateArguments(S, TemplateParams,
482                                    Param->getArgs(), Param->getNumArgs(),
483                                    SpecArg->getArgs(), SpecArg->getNumArgs(),
484                                    Info, Deduced);
485   }
486 
487   // If the argument type is a class template specialization, we
488   // perform template argument deduction using its template
489   // arguments.
490   const RecordType *RecordArg = dyn_cast<RecordType>(Arg);
491   if (!RecordArg) {
492     Info.FirstArg = TemplateArgument(QualType(Param, 0));
493     Info.SecondArg = TemplateArgument(Arg);
494     return Sema::TDK_NonDeducedMismatch;
495   }
496 
497   ClassTemplateSpecializationDecl *SpecArg
498     = dyn_cast<ClassTemplateSpecializationDecl>(RecordArg->getDecl());
499   if (!SpecArg) {
500     Info.FirstArg = TemplateArgument(QualType(Param, 0));
501     Info.SecondArg = TemplateArgument(Arg);
502     return Sema::TDK_NonDeducedMismatch;
503   }
504 
505   // Perform template argument deduction for the template name.
506   if (Sema::TemplateDeductionResult Result
507         = DeduceTemplateArguments(S,
508                                   TemplateParams,
509                                   Param->getTemplateName(),
510                                TemplateName(SpecArg->getSpecializedTemplate()),
511                                   Info, Deduced))
512     return Result;
513 
514   // Perform template argument deduction for the template arguments.
515   return DeduceTemplateArguments(S, TemplateParams,
516                                  Param->getArgs(), Param->getNumArgs(),
517                                  SpecArg->getTemplateArgs().data(),
518                                  SpecArg->getTemplateArgs().size(),
519                                  Info, Deduced);
520 }
521 
522 /// \brief Determines whether the given type is an opaque type that
523 /// might be more qualified when instantiated.
524 static bool IsPossiblyOpaquelyQualifiedType(QualType T) {
525   switch (T->getTypeClass()) {
526   case Type::TypeOfExpr:
527   case Type::TypeOf:
528   case Type::DependentName:
529   case Type::Decltype:
530   case Type::UnresolvedUsing:
531   case Type::TemplateTypeParm:
532     return true;
533 
534   case Type::ConstantArray:
535   case Type::IncompleteArray:
536   case Type::VariableArray:
537   case Type::DependentSizedArray:
538     return IsPossiblyOpaquelyQualifiedType(
539                                       cast<ArrayType>(T)->getElementType());
540 
541   default:
542     return false;
543   }
544 }
545 
546 /// \brief Retrieve the depth and index of a template parameter.
547 static std::pair<unsigned, unsigned>
548 getDepthAndIndex(NamedDecl *ND) {
549   if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(ND))
550     return std::make_pair(TTP->getDepth(), TTP->getIndex());
551 
552   if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(ND))
553     return std::make_pair(NTTP->getDepth(), NTTP->getIndex());
554 
555   TemplateTemplateParmDecl *TTP = cast<TemplateTemplateParmDecl>(ND);
556   return std::make_pair(TTP->getDepth(), TTP->getIndex());
557 }
558 
559 /// \brief Retrieve the depth and index of an unexpanded parameter pack.
560 static std::pair<unsigned, unsigned>
561 getDepthAndIndex(UnexpandedParameterPack UPP) {
562   if (const TemplateTypeParmType *TTP
563                           = UPP.first.dyn_cast<const TemplateTypeParmType *>())
564     return std::make_pair(TTP->getDepth(), TTP->getIndex());
565 
566   return getDepthAndIndex(UPP.first.get<NamedDecl *>());
567 }
568 
569 /// \brief Helper function to build a TemplateParameter when we don't
570 /// know its type statically.
571 static TemplateParameter makeTemplateParameter(Decl *D) {
572   if (TemplateTypeParmDecl *TTP = dyn_cast<TemplateTypeParmDecl>(D))
573     return TemplateParameter(TTP);
574   else if (NonTypeTemplateParmDecl *NTTP = dyn_cast<NonTypeTemplateParmDecl>(D))
575     return TemplateParameter(NTTP);
576 
577   return TemplateParameter(cast<TemplateTemplateParmDecl>(D));
578 }
579 
580 /// \brief Prepare to perform template argument deduction for all of the
581 /// arguments in a set of argument packs.
582 static void PrepareArgumentPackDeduction(Sema &S,
583                        SmallVectorImpl<DeducedTemplateArgument> &Deduced,
584                                            ArrayRef<unsigned> PackIndices,
585                      SmallVectorImpl<DeducedTemplateArgument> &SavedPacks,
586          SmallVectorImpl<
587            SmallVector<DeducedTemplateArgument, 4> > &NewlyDeducedPacks) {
588   // Save the deduced template arguments for each parameter pack expanded
589   // by this pack expansion, then clear out the deduction.
590   for (unsigned I = 0, N = PackIndices.size(); I != N; ++I) {
591     // Save the previously-deduced argument pack, then clear it out so that we
592     // can deduce a new argument pack.
593     SavedPacks[I] = Deduced[PackIndices[I]];
594     Deduced[PackIndices[I]] = TemplateArgument();
595 
596     if (!S.CurrentInstantiationScope)
597       continue;
598 
599     // If the template argument pack was explicitly specified, add that to
600     // the set of deduced arguments.
601     const TemplateArgument *ExplicitArgs;
602     unsigned NumExplicitArgs;
603     if (NamedDecl *PartiallySubstitutedPack
604         = S.CurrentInstantiationScope->getPartiallySubstitutedPack(
605                                                            &ExplicitArgs,
606                                                            &NumExplicitArgs)) {
607       if (getDepthAndIndex(PartiallySubstitutedPack).second == PackIndices[I])
608         NewlyDeducedPacks[I].append(ExplicitArgs,
609                                     ExplicitArgs + NumExplicitArgs);
610     }
611   }
612 }
613 
614 /// \brief Finish template argument deduction for a set of argument packs,
615 /// producing the argument packs and checking for consistency with prior
616 /// deductions.
617 static Sema::TemplateDeductionResult
618 FinishArgumentPackDeduction(Sema &S,
619                             TemplateParameterList *TemplateParams,
620                             bool HasAnyArguments,
621                         SmallVectorImpl<DeducedTemplateArgument> &Deduced,
622                             ArrayRef<unsigned> PackIndices,
623                     SmallVectorImpl<DeducedTemplateArgument> &SavedPacks,
624         SmallVectorImpl<
625           SmallVector<DeducedTemplateArgument, 4> > &NewlyDeducedPacks,
626                             TemplateDeductionInfo &Info) {
627   // Build argument packs for each of the parameter packs expanded by this
628   // pack expansion.
629   for (unsigned I = 0, N = PackIndices.size(); I != N; ++I) {
630     if (HasAnyArguments && NewlyDeducedPacks[I].empty()) {
631       // We were not able to deduce anything for this parameter pack,
632       // so just restore the saved argument pack.
633       Deduced[PackIndices[I]] = SavedPacks[I];
634       continue;
635     }
636 
637     DeducedTemplateArgument NewPack;
638 
639     if (NewlyDeducedPacks[I].empty()) {
640       // If we deduced an empty argument pack, create it now.
641       NewPack = DeducedTemplateArgument(TemplateArgument::getEmptyPack());
642     } else {
643       TemplateArgument *ArgumentPack
644         = new (S.Context) TemplateArgument [NewlyDeducedPacks[I].size()];
645       std::copy(NewlyDeducedPacks[I].begin(), NewlyDeducedPacks[I].end(),
646                 ArgumentPack);
647       NewPack
648         = DeducedTemplateArgument(TemplateArgument(ArgumentPack,
649                                                    NewlyDeducedPacks[I].size()),
650                             NewlyDeducedPacks[I][0].wasDeducedFromArrayBound());
651     }
652 
653     DeducedTemplateArgument Result
654       = checkDeducedTemplateArguments(S.Context, SavedPacks[I], NewPack);
655     if (Result.isNull()) {
656       Info.Param
657         = makeTemplateParameter(TemplateParams->getParam(PackIndices[I]));
658       Info.FirstArg = SavedPacks[I];
659       Info.SecondArg = NewPack;
660       return Sema::TDK_Inconsistent;
661     }
662 
663     Deduced[PackIndices[I]] = Result;
664   }
665 
666   return Sema::TDK_Success;
667 }
668 
669 /// \brief Deduce the template arguments by comparing the list of parameter
670 /// types to the list of argument types, as in the parameter-type-lists of
671 /// function types (C++ [temp.deduct.type]p10).
672 ///
673 /// \param S The semantic analysis object within which we are deducing
674 ///
675 /// \param TemplateParams The template parameters that we are deducing
676 ///
677 /// \param Params The list of parameter types
678 ///
679 /// \param NumParams The number of types in \c Params
680 ///
681 /// \param Args The list of argument types
682 ///
683 /// \param NumArgs The number of types in \c Args
684 ///
685 /// \param Info information about the template argument deduction itself
686 ///
687 /// \param Deduced the deduced template arguments
688 ///
689 /// \param TDF bitwise OR of the TemplateDeductionFlags bits that describe
690 /// how template argument deduction is performed.
691 ///
692 /// \param PartialOrdering If true, we are performing template argument
693 /// deduction for during partial ordering for a call
694 /// (C++0x [temp.deduct.partial]).
695 ///
696 /// \param RefParamComparisons If we're performing template argument deduction
697 /// in the context of partial ordering, the set of qualifier comparisons.
698 ///
699 /// \returns the result of template argument deduction so far. Note that a
700 /// "success" result means that template argument deduction has not yet failed,
701 /// but it may still fail, later, for other reasons.
702 static Sema::TemplateDeductionResult
703 DeduceTemplateArguments(Sema &S,
704                         TemplateParameterList *TemplateParams,
705                         const QualType *Params, unsigned NumParams,
706                         const QualType *Args, unsigned NumArgs,
707                         TemplateDeductionInfo &Info,
708                       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
709                         unsigned TDF,
710                         bool PartialOrdering = false,
711                         SmallVectorImpl<RefParamPartialOrderingComparison> *
712                                                      RefParamComparisons = 0) {
713   // Fast-path check to see if we have too many/too few arguments.
714   if (NumParams != NumArgs &&
715       !(NumParams && isa<PackExpansionType>(Params[NumParams - 1])) &&
716       !(NumArgs && isa<PackExpansionType>(Args[NumArgs - 1])))
717     return Sema::TDK_MiscellaneousDeductionFailure;
718 
719   // C++0x [temp.deduct.type]p10:
720   //   Similarly, if P has a form that contains (T), then each parameter type
721   //   Pi of the respective parameter-type- list of P is compared with the
722   //   corresponding parameter type Ai of the corresponding parameter-type-list
723   //   of A. [...]
724   unsigned ArgIdx = 0, ParamIdx = 0;
725   for (; ParamIdx != NumParams; ++ParamIdx) {
726     // Check argument types.
727     const PackExpansionType *Expansion
728                                 = dyn_cast<PackExpansionType>(Params[ParamIdx]);
729     if (!Expansion) {
730       // Simple case: compare the parameter and argument types at this point.
731 
732       // Make sure we have an argument.
733       if (ArgIdx >= NumArgs)
734         return Sema::TDK_MiscellaneousDeductionFailure;
735 
736       if (isa<PackExpansionType>(Args[ArgIdx])) {
737         // C++0x [temp.deduct.type]p22:
738         //   If the original function parameter associated with A is a function
739         //   parameter pack and the function parameter associated with P is not
740         //   a function parameter pack, then template argument deduction fails.
741         return Sema::TDK_MiscellaneousDeductionFailure;
742       }
743 
744       if (Sema::TemplateDeductionResult Result
745             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
746                                                  Params[ParamIdx], Args[ArgIdx],
747                                                  Info, Deduced, TDF,
748                                                  PartialOrdering,
749                                                  RefParamComparisons))
750         return Result;
751 
752       ++ArgIdx;
753       continue;
754     }
755 
756     // C++0x [temp.deduct.type]p5:
757     //   The non-deduced contexts are:
758     //     - A function parameter pack that does not occur at the end of the
759     //       parameter-declaration-clause.
760     if (ParamIdx + 1 < NumParams)
761       return Sema::TDK_Success;
762 
763     // C++0x [temp.deduct.type]p10:
764     //   If the parameter-declaration corresponding to Pi is a function
765     //   parameter pack, then the type of its declarator- id is compared with
766     //   each remaining parameter type in the parameter-type-list of A. Each
767     //   comparison deduces template arguments for subsequent positions in the
768     //   template parameter packs expanded by the function parameter pack.
769 
770     // Compute the set of template parameter indices that correspond to
771     // parameter packs expanded by the pack expansion.
772     SmallVector<unsigned, 2> PackIndices;
773     QualType Pattern = Expansion->getPattern();
774     {
775       llvm::SmallBitVector SawIndices(TemplateParams->size());
776       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
777       S.collectUnexpandedParameterPacks(Pattern, Unexpanded);
778       for (unsigned I = 0, N = Unexpanded.size(); I != N; ++I) {
779         unsigned Depth, Index;
780         llvm::tie(Depth, Index) = getDepthAndIndex(Unexpanded[I]);
781         if (Depth == 0 && !SawIndices[Index]) {
782           SawIndices[Index] = true;
783           PackIndices.push_back(Index);
784         }
785       }
786     }
787     assert(!PackIndices.empty() && "Pack expansion without unexpanded packs?");
788 
789     // Keep track of the deduced template arguments for each parameter pack
790     // expanded by this pack expansion (the outer index) and for each
791     // template argument (the inner SmallVectors).
792     SmallVector<SmallVector<DeducedTemplateArgument, 4>, 2>
793       NewlyDeducedPacks(PackIndices.size());
794     SmallVector<DeducedTemplateArgument, 2>
795       SavedPacks(PackIndices.size());
796     PrepareArgumentPackDeduction(S, Deduced, PackIndices, SavedPacks,
797                                  NewlyDeducedPacks);
798 
799     bool HasAnyArguments = false;
800     for (; ArgIdx < NumArgs; ++ArgIdx) {
801       HasAnyArguments = true;
802 
803       // Deduce template arguments from the pattern.
804       if (Sema::TemplateDeductionResult Result
805             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams, Pattern,
806                                                  Args[ArgIdx], Info, Deduced,
807                                                  TDF, PartialOrdering,
808                                                  RefParamComparisons))
809         return Result;
810 
811       // Capture the deduced template arguments for each parameter pack expanded
812       // by this pack expansion, add them to the list of arguments we've deduced
813       // for that pack, then clear out the deduced argument.
814       for (unsigned I = 0, N = PackIndices.size(); I != N; ++I) {
815         DeducedTemplateArgument &DeducedArg = Deduced[PackIndices[I]];
816         if (!DeducedArg.isNull()) {
817           NewlyDeducedPacks[I].push_back(DeducedArg);
818           DeducedArg = DeducedTemplateArgument();
819         }
820       }
821     }
822 
823     // Build argument packs for each of the parameter packs expanded by this
824     // pack expansion.
825     if (Sema::TemplateDeductionResult Result
826           = FinishArgumentPackDeduction(S, TemplateParams, HasAnyArguments,
827                                         Deduced, PackIndices, SavedPacks,
828                                         NewlyDeducedPacks, Info))
829       return Result;
830   }
831 
832   // Make sure we don't have any extra arguments.
833   if (ArgIdx < NumArgs)
834     return Sema::TDK_MiscellaneousDeductionFailure;
835 
836   return Sema::TDK_Success;
837 }
838 
839 /// \brief Determine whether the parameter has qualifiers that are either
840 /// inconsistent with or a superset of the argument's qualifiers.
841 static bool hasInconsistentOrSupersetQualifiersOf(QualType ParamType,
842                                                   QualType ArgType) {
843   Qualifiers ParamQs = ParamType.getQualifiers();
844   Qualifiers ArgQs = ArgType.getQualifiers();
845 
846   if (ParamQs == ArgQs)
847     return false;
848 
849   // Mismatched (but not missing) Objective-C GC attributes.
850   if (ParamQs.getObjCGCAttr() != ArgQs.getObjCGCAttr() &&
851       ParamQs.hasObjCGCAttr())
852     return true;
853 
854   // Mismatched (but not missing) address spaces.
855   if (ParamQs.getAddressSpace() != ArgQs.getAddressSpace() &&
856       ParamQs.hasAddressSpace())
857     return true;
858 
859   // Mismatched (but not missing) Objective-C lifetime qualifiers.
860   if (ParamQs.getObjCLifetime() != ArgQs.getObjCLifetime() &&
861       ParamQs.hasObjCLifetime())
862     return true;
863 
864   // CVR qualifier superset.
865   return (ParamQs.getCVRQualifiers() != ArgQs.getCVRQualifiers()) &&
866       ((ParamQs.getCVRQualifiers() | ArgQs.getCVRQualifiers())
867                                                 == ParamQs.getCVRQualifiers());
868 }
869 
870 /// \brief Deduce the template arguments by comparing the parameter type and
871 /// the argument type (C++ [temp.deduct.type]).
872 ///
873 /// \param S the semantic analysis object within which we are deducing
874 ///
875 /// \param TemplateParams the template parameters that we are deducing
876 ///
877 /// \param ParamIn the parameter type
878 ///
879 /// \param ArgIn the argument type
880 ///
881 /// \param Info information about the template argument deduction itself
882 ///
883 /// \param Deduced the deduced template arguments
884 ///
885 /// \param TDF bitwise OR of the TemplateDeductionFlags bits that describe
886 /// how template argument deduction is performed.
887 ///
888 /// \param PartialOrdering Whether we're performing template argument deduction
889 /// in the context of partial ordering (C++0x [temp.deduct.partial]).
890 ///
891 /// \param RefParamComparisons If we're performing template argument deduction
892 /// in the context of partial ordering, the set of qualifier comparisons.
893 ///
894 /// \returns the result of template argument deduction so far. Note that a
895 /// "success" result means that template argument deduction has not yet failed,
896 /// but it may still fail, later, for other reasons.
897 static Sema::TemplateDeductionResult
898 DeduceTemplateArgumentsByTypeMatch(Sema &S,
899                                    TemplateParameterList *TemplateParams,
900                                    QualType ParamIn, QualType ArgIn,
901                                    TemplateDeductionInfo &Info,
902                             SmallVectorImpl<DeducedTemplateArgument> &Deduced,
903                                    unsigned TDF,
904                                    bool PartialOrdering,
905                             SmallVectorImpl<RefParamPartialOrderingComparison> *
906                                                           RefParamComparisons) {
907   // We only want to look at the canonical types, since typedefs and
908   // sugar are not part of template argument deduction.
909   QualType Param = S.Context.getCanonicalType(ParamIn);
910   QualType Arg = S.Context.getCanonicalType(ArgIn);
911 
912   // If the argument type is a pack expansion, look at its pattern.
913   // This isn't explicitly called out
914   if (const PackExpansionType *ArgExpansion
915                                             = dyn_cast<PackExpansionType>(Arg))
916     Arg = ArgExpansion->getPattern();
917 
918   if (PartialOrdering) {
919     // C++0x [temp.deduct.partial]p5:
920     //   Before the partial ordering is done, certain transformations are
921     //   performed on the types used for partial ordering:
922     //     - If P is a reference type, P is replaced by the type referred to.
923     const ReferenceType *ParamRef = Param->getAs<ReferenceType>();
924     if (ParamRef)
925       Param = ParamRef->getPointeeType();
926 
927     //     - If A is a reference type, A is replaced by the type referred to.
928     const ReferenceType *ArgRef = Arg->getAs<ReferenceType>();
929     if (ArgRef)
930       Arg = ArgRef->getPointeeType();
931 
932     if (RefParamComparisons && ParamRef && ArgRef) {
933       // C++0x [temp.deduct.partial]p6:
934       //   If both P and A were reference types (before being replaced with the
935       //   type referred to above), determine which of the two types (if any) is
936       //   more cv-qualified than the other; otherwise the types are considered
937       //   to be equally cv-qualified for partial ordering purposes. The result
938       //   of this determination will be used below.
939       //
940       // We save this information for later, using it only when deduction
941       // succeeds in both directions.
942       RefParamPartialOrderingComparison Comparison;
943       Comparison.ParamIsRvalueRef = ParamRef->getAs<RValueReferenceType>();
944       Comparison.ArgIsRvalueRef = ArgRef->getAs<RValueReferenceType>();
945       Comparison.Qualifiers = NeitherMoreQualified;
946 
947       Qualifiers ParamQuals = Param.getQualifiers();
948       Qualifiers ArgQuals = Arg.getQualifiers();
949       if (ParamQuals.isStrictSupersetOf(ArgQuals))
950         Comparison.Qualifiers = ParamMoreQualified;
951       else if (ArgQuals.isStrictSupersetOf(ParamQuals))
952         Comparison.Qualifiers = ArgMoreQualified;
953       RefParamComparisons->push_back(Comparison);
954     }
955 
956     // C++0x [temp.deduct.partial]p7:
957     //   Remove any top-level cv-qualifiers:
958     //     - If P is a cv-qualified type, P is replaced by the cv-unqualified
959     //       version of P.
960     Param = Param.getUnqualifiedType();
961     //     - If A is a cv-qualified type, A is replaced by the cv-unqualified
962     //       version of A.
963     Arg = Arg.getUnqualifiedType();
964   } else {
965     // C++0x [temp.deduct.call]p4 bullet 1:
966     //   - If the original P is a reference type, the deduced A (i.e., the type
967     //     referred to by the reference) can be more cv-qualified than the
968     //     transformed A.
969     if (TDF & TDF_ParamWithReferenceType) {
970       Qualifiers Quals;
971       QualType UnqualParam = S.Context.getUnqualifiedArrayType(Param, Quals);
972       Quals.setCVRQualifiers(Quals.getCVRQualifiers() &
973                              Arg.getCVRQualifiers());
974       Param = S.Context.getQualifiedType(UnqualParam, Quals);
975     }
976 
977     if ((TDF & TDF_TopLevelParameterTypeList) && !Param->isFunctionType()) {
978       // C++0x [temp.deduct.type]p10:
979       //   If P and A are function types that originated from deduction when
980       //   taking the address of a function template (14.8.2.2) or when deducing
981       //   template arguments from a function declaration (14.8.2.6) and Pi and
982       //   Ai are parameters of the top-level parameter-type-list of P and A,
983       //   respectively, Pi is adjusted if it is an rvalue reference to a
984       //   cv-unqualified template parameter and Ai is an lvalue reference, in
985       //   which case the type of Pi is changed to be the template parameter
986       //   type (i.e., T&& is changed to simply T). [ Note: As a result, when
987       //   Pi is T&& and Ai is X&, the adjusted Pi will be T, causing T to be
988       //   deduced as X&. - end note ]
989       TDF &= ~TDF_TopLevelParameterTypeList;
990 
991       if (const RValueReferenceType *ParamRef
992                                         = Param->getAs<RValueReferenceType>()) {
993         if (isa<TemplateTypeParmType>(ParamRef->getPointeeType()) &&
994             !ParamRef->getPointeeType().getQualifiers())
995           if (Arg->isLValueReferenceType())
996             Param = ParamRef->getPointeeType();
997       }
998     }
999   }
1000 
1001   // C++ [temp.deduct.type]p9:
1002   //   A template type argument T, a template template argument TT or a
1003   //   template non-type argument i can be deduced if P and A have one of
1004   //   the following forms:
1005   //
1006   //     T
1007   //     cv-list T
1008   if (const TemplateTypeParmType *TemplateTypeParm
1009         = Param->getAs<TemplateTypeParmType>()) {
1010     // Just skip any attempts to deduce from a placeholder type.
1011     if (Arg->isPlaceholderType())
1012       return Sema::TDK_Success;
1013 
1014     unsigned Index = TemplateTypeParm->getIndex();
1015     bool RecanonicalizeArg = false;
1016 
1017     // If the argument type is an array type, move the qualifiers up to the
1018     // top level, so they can be matched with the qualifiers on the parameter.
1019     if (isa<ArrayType>(Arg)) {
1020       Qualifiers Quals;
1021       Arg = S.Context.getUnqualifiedArrayType(Arg, Quals);
1022       if (Quals) {
1023         Arg = S.Context.getQualifiedType(Arg, Quals);
1024         RecanonicalizeArg = true;
1025       }
1026     }
1027 
1028     // The argument type can not be less qualified than the parameter
1029     // type.
1030     if (!(TDF & TDF_IgnoreQualifiers) &&
1031         hasInconsistentOrSupersetQualifiersOf(Param, Arg)) {
1032       Info.Param = cast<TemplateTypeParmDecl>(TemplateParams->getParam(Index));
1033       Info.FirstArg = TemplateArgument(Param);
1034       Info.SecondArg = TemplateArgument(Arg);
1035       return Sema::TDK_Underqualified;
1036     }
1037 
1038     assert(TemplateTypeParm->getDepth() == 0 && "Can't deduce with depth > 0");
1039     assert(Arg != S.Context.OverloadTy && "Unresolved overloaded function");
1040     QualType DeducedType = Arg;
1041 
1042     // Remove any qualifiers on the parameter from the deduced type.
1043     // We checked the qualifiers for consistency above.
1044     Qualifiers DeducedQs = DeducedType.getQualifiers();
1045     Qualifiers ParamQs = Param.getQualifiers();
1046     DeducedQs.removeCVRQualifiers(ParamQs.getCVRQualifiers());
1047     if (ParamQs.hasObjCGCAttr())
1048       DeducedQs.removeObjCGCAttr();
1049     if (ParamQs.hasAddressSpace())
1050       DeducedQs.removeAddressSpace();
1051     if (ParamQs.hasObjCLifetime())
1052       DeducedQs.removeObjCLifetime();
1053 
1054     // Objective-C ARC:
1055     //   If template deduction would produce a lifetime qualifier on a type
1056     //   that is not a lifetime type, template argument deduction fails.
1057     if (ParamQs.hasObjCLifetime() && !DeducedType->isObjCLifetimeType() &&
1058         !DeducedType->isDependentType()) {
1059       Info.Param = cast<TemplateTypeParmDecl>(TemplateParams->getParam(Index));
1060       Info.FirstArg = TemplateArgument(Param);
1061       Info.SecondArg = TemplateArgument(Arg);
1062       return Sema::TDK_Underqualified;
1063     }
1064 
1065     // Objective-C ARC:
1066     //   If template deduction would produce an argument type with lifetime type
1067     //   but no lifetime qualifier, the __strong lifetime qualifier is inferred.
1068     if (S.getLangOpts().ObjCAutoRefCount &&
1069         DeducedType->isObjCLifetimeType() &&
1070         !DeducedQs.hasObjCLifetime())
1071       DeducedQs.setObjCLifetime(Qualifiers::OCL_Strong);
1072 
1073     DeducedType = S.Context.getQualifiedType(DeducedType.getUnqualifiedType(),
1074                                              DeducedQs);
1075 
1076     if (RecanonicalizeArg)
1077       DeducedType = S.Context.getCanonicalType(DeducedType);
1078 
1079     DeducedTemplateArgument NewDeduced(DeducedType);
1080     DeducedTemplateArgument Result = checkDeducedTemplateArguments(S.Context,
1081                                                                  Deduced[Index],
1082                                                                    NewDeduced);
1083     if (Result.isNull()) {
1084       Info.Param = cast<TemplateTypeParmDecl>(TemplateParams->getParam(Index));
1085       Info.FirstArg = Deduced[Index];
1086       Info.SecondArg = NewDeduced;
1087       return Sema::TDK_Inconsistent;
1088     }
1089 
1090     Deduced[Index] = Result;
1091     return Sema::TDK_Success;
1092   }
1093 
1094   // Set up the template argument deduction information for a failure.
1095   Info.FirstArg = TemplateArgument(ParamIn);
1096   Info.SecondArg = TemplateArgument(ArgIn);
1097 
1098   // If the parameter is an already-substituted template parameter
1099   // pack, do nothing: we don't know which of its arguments to look
1100   // at, so we have to wait until all of the parameter packs in this
1101   // expansion have arguments.
1102   if (isa<SubstTemplateTypeParmPackType>(Param))
1103     return Sema::TDK_Success;
1104 
1105   // Check the cv-qualifiers on the parameter and argument types.
1106   if (!(TDF & TDF_IgnoreQualifiers)) {
1107     if (TDF & TDF_ParamWithReferenceType) {
1108       if (hasInconsistentOrSupersetQualifiersOf(Param, Arg))
1109         return Sema::TDK_NonDeducedMismatch;
1110     } else if (!IsPossiblyOpaquelyQualifiedType(Param)) {
1111       if (Param.getCVRQualifiers() != Arg.getCVRQualifiers())
1112         return Sema::TDK_NonDeducedMismatch;
1113     }
1114 
1115     // If the parameter type is not dependent, there is nothing to deduce.
1116     if (!Param->isDependentType()) {
1117       if (!(TDF & TDF_SkipNonDependent) && Param != Arg)
1118         return Sema::TDK_NonDeducedMismatch;
1119 
1120       return Sema::TDK_Success;
1121     }
1122   } else if (!Param->isDependentType() &&
1123              Param.getUnqualifiedType() == Arg.getUnqualifiedType()) {
1124     return Sema::TDK_Success;
1125   }
1126 
1127   switch (Param->getTypeClass()) {
1128     // Non-canonical types cannot appear here.
1129 #define NON_CANONICAL_TYPE(Class, Base) \
1130   case Type::Class: llvm_unreachable("deducing non-canonical type: " #Class);
1131 #define TYPE(Class, Base)
1132 #include "clang/AST/TypeNodes.def"
1133 
1134     case Type::TemplateTypeParm:
1135     case Type::SubstTemplateTypeParmPack:
1136       llvm_unreachable("Type nodes handled above");
1137 
1138     // These types cannot be dependent, so simply check whether the types are
1139     // the same.
1140     case Type::Builtin:
1141     case Type::VariableArray:
1142     case Type::Vector:
1143     case Type::FunctionNoProto:
1144     case Type::Record:
1145     case Type::Enum:
1146     case Type::ObjCObject:
1147     case Type::ObjCInterface:
1148     case Type::ObjCObjectPointer: {
1149       if (TDF & TDF_SkipNonDependent)
1150         return Sema::TDK_Success;
1151 
1152       if (TDF & TDF_IgnoreQualifiers) {
1153         Param = Param.getUnqualifiedType();
1154         Arg = Arg.getUnqualifiedType();
1155       }
1156 
1157       return Param == Arg? Sema::TDK_Success : Sema::TDK_NonDeducedMismatch;
1158     }
1159 
1160     //     _Complex T   [placeholder extension]
1161     case Type::Complex:
1162       if (const ComplexType *ComplexArg = Arg->getAs<ComplexType>())
1163         return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1164                                     cast<ComplexType>(Param)->getElementType(),
1165                                     ComplexArg->getElementType(),
1166                                     Info, Deduced, TDF);
1167 
1168       return Sema::TDK_NonDeducedMismatch;
1169 
1170     //     _Atomic T   [extension]
1171     case Type::Atomic:
1172       if (const AtomicType *AtomicArg = Arg->getAs<AtomicType>())
1173         return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1174                                        cast<AtomicType>(Param)->getValueType(),
1175                                        AtomicArg->getValueType(),
1176                                        Info, Deduced, TDF);
1177 
1178       return Sema::TDK_NonDeducedMismatch;
1179 
1180     //     T *
1181     case Type::Pointer: {
1182       QualType PointeeType;
1183       if (const PointerType *PointerArg = Arg->getAs<PointerType>()) {
1184         PointeeType = PointerArg->getPointeeType();
1185       } else if (const ObjCObjectPointerType *PointerArg
1186                    = Arg->getAs<ObjCObjectPointerType>()) {
1187         PointeeType = PointerArg->getPointeeType();
1188       } else {
1189         return Sema::TDK_NonDeducedMismatch;
1190       }
1191 
1192       unsigned SubTDF = TDF & (TDF_IgnoreQualifiers | TDF_DerivedClass);
1193       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1194                                      cast<PointerType>(Param)->getPointeeType(),
1195                                      PointeeType,
1196                                      Info, Deduced, SubTDF);
1197     }
1198 
1199     //     T &
1200     case Type::LValueReference: {
1201       const LValueReferenceType *ReferenceArg = Arg->getAs<LValueReferenceType>();
1202       if (!ReferenceArg)
1203         return Sema::TDK_NonDeducedMismatch;
1204 
1205       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1206                            cast<LValueReferenceType>(Param)->getPointeeType(),
1207                            ReferenceArg->getPointeeType(), Info, Deduced, 0);
1208     }
1209 
1210     //     T && [C++0x]
1211     case Type::RValueReference: {
1212       const RValueReferenceType *ReferenceArg = Arg->getAs<RValueReferenceType>();
1213       if (!ReferenceArg)
1214         return Sema::TDK_NonDeducedMismatch;
1215 
1216       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1217                              cast<RValueReferenceType>(Param)->getPointeeType(),
1218                              ReferenceArg->getPointeeType(),
1219                              Info, Deduced, 0);
1220     }
1221 
1222     //     T [] (implied, but not stated explicitly)
1223     case Type::IncompleteArray: {
1224       const IncompleteArrayType *IncompleteArrayArg =
1225         S.Context.getAsIncompleteArrayType(Arg);
1226       if (!IncompleteArrayArg)
1227         return Sema::TDK_NonDeducedMismatch;
1228 
1229       unsigned SubTDF = TDF & TDF_IgnoreQualifiers;
1230       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1231                     S.Context.getAsIncompleteArrayType(Param)->getElementType(),
1232                     IncompleteArrayArg->getElementType(),
1233                     Info, Deduced, SubTDF);
1234     }
1235 
1236     //     T [integer-constant]
1237     case Type::ConstantArray: {
1238       const ConstantArrayType *ConstantArrayArg =
1239         S.Context.getAsConstantArrayType(Arg);
1240       if (!ConstantArrayArg)
1241         return Sema::TDK_NonDeducedMismatch;
1242 
1243       const ConstantArrayType *ConstantArrayParm =
1244         S.Context.getAsConstantArrayType(Param);
1245       if (ConstantArrayArg->getSize() != ConstantArrayParm->getSize())
1246         return Sema::TDK_NonDeducedMismatch;
1247 
1248       unsigned SubTDF = TDF & TDF_IgnoreQualifiers;
1249       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1250                                            ConstantArrayParm->getElementType(),
1251                                            ConstantArrayArg->getElementType(),
1252                                            Info, Deduced, SubTDF);
1253     }
1254 
1255     //     type [i]
1256     case Type::DependentSizedArray: {
1257       const ArrayType *ArrayArg = S.Context.getAsArrayType(Arg);
1258       if (!ArrayArg)
1259         return Sema::TDK_NonDeducedMismatch;
1260 
1261       unsigned SubTDF = TDF & TDF_IgnoreQualifiers;
1262 
1263       // Check the element type of the arrays
1264       const DependentSizedArrayType *DependentArrayParm
1265         = S.Context.getAsDependentSizedArrayType(Param);
1266       if (Sema::TemplateDeductionResult Result
1267             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1268                                           DependentArrayParm->getElementType(),
1269                                           ArrayArg->getElementType(),
1270                                           Info, Deduced, SubTDF))
1271         return Result;
1272 
1273       // Determine the array bound is something we can deduce.
1274       NonTypeTemplateParmDecl *NTTP
1275         = getDeducedParameterFromExpr(DependentArrayParm->getSizeExpr());
1276       if (!NTTP)
1277         return Sema::TDK_Success;
1278 
1279       // We can perform template argument deduction for the given non-type
1280       // template parameter.
1281       assert(NTTP->getDepth() == 0 &&
1282              "Cannot deduce non-type template argument at depth > 0");
1283       if (const ConstantArrayType *ConstantArrayArg
1284             = dyn_cast<ConstantArrayType>(ArrayArg)) {
1285         llvm::APSInt Size(ConstantArrayArg->getSize());
1286         return DeduceNonTypeTemplateArgument(S, NTTP, Size,
1287                                              S.Context.getSizeType(),
1288                                              /*ArrayBound=*/true,
1289                                              Info, Deduced);
1290       }
1291       if (const DependentSizedArrayType *DependentArrayArg
1292             = dyn_cast<DependentSizedArrayType>(ArrayArg))
1293         if (DependentArrayArg->getSizeExpr())
1294           return DeduceNonTypeTemplateArgument(S, NTTP,
1295                                                DependentArrayArg->getSizeExpr(),
1296                                                Info, Deduced);
1297 
1298       // Incomplete type does not match a dependently-sized array type
1299       return Sema::TDK_NonDeducedMismatch;
1300     }
1301 
1302     //     type(*)(T)
1303     //     T(*)()
1304     //     T(*)(T)
1305     case Type::FunctionProto: {
1306       unsigned SubTDF = TDF & TDF_TopLevelParameterTypeList;
1307       const FunctionProtoType *FunctionProtoArg =
1308         dyn_cast<FunctionProtoType>(Arg);
1309       if (!FunctionProtoArg)
1310         return Sema::TDK_NonDeducedMismatch;
1311 
1312       const FunctionProtoType *FunctionProtoParam =
1313         cast<FunctionProtoType>(Param);
1314 
1315       if (FunctionProtoParam->getTypeQuals()
1316             != FunctionProtoArg->getTypeQuals() ||
1317           FunctionProtoParam->getRefQualifier()
1318             != FunctionProtoArg->getRefQualifier() ||
1319           FunctionProtoParam->isVariadic() != FunctionProtoArg->isVariadic())
1320         return Sema::TDK_NonDeducedMismatch;
1321 
1322       // Check return types.
1323       if (Sema::TemplateDeductionResult Result
1324             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1325                                             FunctionProtoParam->getResultType(),
1326                                             FunctionProtoArg->getResultType(),
1327                                             Info, Deduced, 0))
1328         return Result;
1329 
1330       return DeduceTemplateArguments(S, TemplateParams,
1331                                      FunctionProtoParam->arg_type_begin(),
1332                                      FunctionProtoParam->getNumArgs(),
1333                                      FunctionProtoArg->arg_type_begin(),
1334                                      FunctionProtoArg->getNumArgs(),
1335                                      Info, Deduced, SubTDF);
1336     }
1337 
1338     case Type::InjectedClassName: {
1339       // Treat a template's injected-class-name as if the template
1340       // specialization type had been used.
1341       Param = cast<InjectedClassNameType>(Param)
1342         ->getInjectedSpecializationType();
1343       assert(isa<TemplateSpecializationType>(Param) &&
1344              "injected class name is not a template specialization type");
1345       // fall through
1346     }
1347 
1348     //     template-name<T> (where template-name refers to a class template)
1349     //     template-name<i>
1350     //     TT<T>
1351     //     TT<i>
1352     //     TT<>
1353     case Type::TemplateSpecialization: {
1354       const TemplateSpecializationType *SpecParam
1355         = cast<TemplateSpecializationType>(Param);
1356 
1357       // Try to deduce template arguments from the template-id.
1358       Sema::TemplateDeductionResult Result
1359         = DeduceTemplateArguments(S, TemplateParams, SpecParam, Arg,
1360                                   Info, Deduced);
1361 
1362       if (Result && (TDF & TDF_DerivedClass)) {
1363         // C++ [temp.deduct.call]p3b3:
1364         //   If P is a class, and P has the form template-id, then A can be a
1365         //   derived class of the deduced A. Likewise, if P is a pointer to a
1366         //   class of the form template-id, A can be a pointer to a derived
1367         //   class pointed to by the deduced A.
1368         //
1369         // More importantly:
1370         //   These alternatives are considered only if type deduction would
1371         //   otherwise fail.
1372         if (const RecordType *RecordT = Arg->getAs<RecordType>()) {
1373           // We cannot inspect base classes as part of deduction when the type
1374           // is incomplete, so either instantiate any templates necessary to
1375           // complete the type, or skip over it if it cannot be completed.
1376           if (S.RequireCompleteType(Info.getLocation(), Arg, 0))
1377             return Result;
1378 
1379           // Use data recursion to crawl through the list of base classes.
1380           // Visited contains the set of nodes we have already visited, while
1381           // ToVisit is our stack of records that we still need to visit.
1382           llvm::SmallPtrSet<const RecordType *, 8> Visited;
1383           SmallVector<const RecordType *, 8> ToVisit;
1384           ToVisit.push_back(RecordT);
1385           bool Successful = false;
1386           SmallVector<DeducedTemplateArgument, 8> DeducedOrig(Deduced.begin(),
1387                                                               Deduced.end());
1388           while (!ToVisit.empty()) {
1389             // Retrieve the next class in the inheritance hierarchy.
1390             const RecordType *NextT = ToVisit.back();
1391             ToVisit.pop_back();
1392 
1393             // If we have already seen this type, skip it.
1394             if (!Visited.insert(NextT))
1395               continue;
1396 
1397             // If this is a base class, try to perform template argument
1398             // deduction from it.
1399             if (NextT != RecordT) {
1400               TemplateDeductionInfo BaseInfo(Info.getLocation());
1401               Sema::TemplateDeductionResult BaseResult
1402                 = DeduceTemplateArguments(S, TemplateParams, SpecParam,
1403                                           QualType(NextT, 0), BaseInfo,
1404                                           Deduced);
1405 
1406               // If template argument deduction for this base was successful,
1407               // note that we had some success. Otherwise, ignore any deductions
1408               // from this base class.
1409               if (BaseResult == Sema::TDK_Success) {
1410                 Successful = true;
1411                 DeducedOrig.clear();
1412                 DeducedOrig.append(Deduced.begin(), Deduced.end());
1413                 Info.Param = BaseInfo.Param;
1414                 Info.FirstArg = BaseInfo.FirstArg;
1415                 Info.SecondArg = BaseInfo.SecondArg;
1416               }
1417               else
1418                 Deduced = DeducedOrig;
1419             }
1420 
1421             // Visit base classes
1422             CXXRecordDecl *Next = cast<CXXRecordDecl>(NextT->getDecl());
1423             for (CXXRecordDecl::base_class_iterator Base = Next->bases_begin(),
1424                                                  BaseEnd = Next->bases_end();
1425                  Base != BaseEnd; ++Base) {
1426               assert(Base->getType()->isRecordType() &&
1427                      "Base class that isn't a record?");
1428               ToVisit.push_back(Base->getType()->getAs<RecordType>());
1429             }
1430           }
1431 
1432           if (Successful)
1433             return Sema::TDK_Success;
1434         }
1435 
1436       }
1437 
1438       return Result;
1439     }
1440 
1441     //     T type::*
1442     //     T T::*
1443     //     T (type::*)()
1444     //     type (T::*)()
1445     //     type (type::*)(T)
1446     //     type (T::*)(T)
1447     //     T (type::*)(T)
1448     //     T (T::*)()
1449     //     T (T::*)(T)
1450     case Type::MemberPointer: {
1451       const MemberPointerType *MemPtrParam = cast<MemberPointerType>(Param);
1452       const MemberPointerType *MemPtrArg = dyn_cast<MemberPointerType>(Arg);
1453       if (!MemPtrArg)
1454         return Sema::TDK_NonDeducedMismatch;
1455 
1456       if (Sema::TemplateDeductionResult Result
1457             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1458                                                  MemPtrParam->getPointeeType(),
1459                                                  MemPtrArg->getPointeeType(),
1460                                                  Info, Deduced,
1461                                                  TDF & TDF_IgnoreQualifiers))
1462         return Result;
1463 
1464       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1465                                            QualType(MemPtrParam->getClass(), 0),
1466                                            QualType(MemPtrArg->getClass(), 0),
1467                                            Info, Deduced,
1468                                            TDF & TDF_IgnoreQualifiers);
1469     }
1470 
1471     //     (clang extension)
1472     //
1473     //     type(^)(T)
1474     //     T(^)()
1475     //     T(^)(T)
1476     case Type::BlockPointer: {
1477       const BlockPointerType *BlockPtrParam = cast<BlockPointerType>(Param);
1478       const BlockPointerType *BlockPtrArg = dyn_cast<BlockPointerType>(Arg);
1479 
1480       if (!BlockPtrArg)
1481         return Sema::TDK_NonDeducedMismatch;
1482 
1483       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1484                                                 BlockPtrParam->getPointeeType(),
1485                                                 BlockPtrArg->getPointeeType(),
1486                                                 Info, Deduced, 0);
1487     }
1488 
1489     //     (clang extension)
1490     //
1491     //     T __attribute__(((ext_vector_type(<integral constant>))))
1492     case Type::ExtVector: {
1493       const ExtVectorType *VectorParam = cast<ExtVectorType>(Param);
1494       if (const ExtVectorType *VectorArg = dyn_cast<ExtVectorType>(Arg)) {
1495         // Make sure that the vectors have the same number of elements.
1496         if (VectorParam->getNumElements() != VectorArg->getNumElements())
1497           return Sema::TDK_NonDeducedMismatch;
1498 
1499         // Perform deduction on the element types.
1500         return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1501                                                   VectorParam->getElementType(),
1502                                                   VectorArg->getElementType(),
1503                                                   Info, Deduced, TDF);
1504       }
1505 
1506       if (const DependentSizedExtVectorType *VectorArg
1507                                 = dyn_cast<DependentSizedExtVectorType>(Arg)) {
1508         // We can't check the number of elements, since the argument has a
1509         // dependent number of elements. This can only occur during partial
1510         // ordering.
1511 
1512         // Perform deduction on the element types.
1513         return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1514                                                   VectorParam->getElementType(),
1515                                                   VectorArg->getElementType(),
1516                                                   Info, Deduced, TDF);
1517       }
1518 
1519       return Sema::TDK_NonDeducedMismatch;
1520     }
1521 
1522     //     (clang extension)
1523     //
1524     //     T __attribute__(((ext_vector_type(N))))
1525     case Type::DependentSizedExtVector: {
1526       const DependentSizedExtVectorType *VectorParam
1527         = cast<DependentSizedExtVectorType>(Param);
1528 
1529       if (const ExtVectorType *VectorArg = dyn_cast<ExtVectorType>(Arg)) {
1530         // Perform deduction on the element types.
1531         if (Sema::TemplateDeductionResult Result
1532               = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1533                                                   VectorParam->getElementType(),
1534                                                    VectorArg->getElementType(),
1535                                                    Info, Deduced, TDF))
1536           return Result;
1537 
1538         // Perform deduction on the vector size, if we can.
1539         NonTypeTemplateParmDecl *NTTP
1540           = getDeducedParameterFromExpr(VectorParam->getSizeExpr());
1541         if (!NTTP)
1542           return Sema::TDK_Success;
1543 
1544         llvm::APSInt ArgSize(S.Context.getTypeSize(S.Context.IntTy), false);
1545         ArgSize = VectorArg->getNumElements();
1546         return DeduceNonTypeTemplateArgument(S, NTTP, ArgSize, S.Context.IntTy,
1547                                              false, Info, Deduced);
1548       }
1549 
1550       if (const DependentSizedExtVectorType *VectorArg
1551                                 = dyn_cast<DependentSizedExtVectorType>(Arg)) {
1552         // Perform deduction on the element types.
1553         if (Sema::TemplateDeductionResult Result
1554             = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1555                                                  VectorParam->getElementType(),
1556                                                  VectorArg->getElementType(),
1557                                                  Info, Deduced, TDF))
1558           return Result;
1559 
1560         // Perform deduction on the vector size, if we can.
1561         NonTypeTemplateParmDecl *NTTP
1562           = getDeducedParameterFromExpr(VectorParam->getSizeExpr());
1563         if (!NTTP)
1564           return Sema::TDK_Success;
1565 
1566         return DeduceNonTypeTemplateArgument(S, NTTP, VectorArg->getSizeExpr(),
1567                                              Info, Deduced);
1568       }
1569 
1570       return Sema::TDK_NonDeducedMismatch;
1571     }
1572 
1573     case Type::TypeOfExpr:
1574     case Type::TypeOf:
1575     case Type::DependentName:
1576     case Type::UnresolvedUsing:
1577     case Type::Decltype:
1578     case Type::UnaryTransform:
1579     case Type::Auto:
1580     case Type::DependentTemplateSpecialization:
1581     case Type::PackExpansion:
1582       // No template argument deduction for these types
1583       return Sema::TDK_Success;
1584   }
1585 
1586   llvm_unreachable("Invalid Type Class!");
1587 }
1588 
1589 static Sema::TemplateDeductionResult
1590 DeduceTemplateArguments(Sema &S,
1591                         TemplateParameterList *TemplateParams,
1592                         const TemplateArgument &Param,
1593                         TemplateArgument Arg,
1594                         TemplateDeductionInfo &Info,
1595                     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
1596   // If the template argument is a pack expansion, perform template argument
1597   // deduction against the pattern of that expansion. This only occurs during
1598   // partial ordering.
1599   if (Arg.isPackExpansion())
1600     Arg = Arg.getPackExpansionPattern();
1601 
1602   switch (Param.getKind()) {
1603   case TemplateArgument::Null:
1604     llvm_unreachable("Null template argument in parameter list");
1605 
1606   case TemplateArgument::Type:
1607     if (Arg.getKind() == TemplateArgument::Type)
1608       return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
1609                                                 Param.getAsType(),
1610                                                 Arg.getAsType(),
1611                                                 Info, Deduced, 0);
1612     Info.FirstArg = Param;
1613     Info.SecondArg = Arg;
1614     return Sema::TDK_NonDeducedMismatch;
1615 
1616   case TemplateArgument::Template:
1617     if (Arg.getKind() == TemplateArgument::Template)
1618       return DeduceTemplateArguments(S, TemplateParams,
1619                                      Param.getAsTemplate(),
1620                                      Arg.getAsTemplate(), Info, Deduced);
1621     Info.FirstArg = Param;
1622     Info.SecondArg = Arg;
1623     return Sema::TDK_NonDeducedMismatch;
1624 
1625   case TemplateArgument::TemplateExpansion:
1626     llvm_unreachable("caller should handle pack expansions");
1627 
1628   case TemplateArgument::Declaration:
1629     if (Arg.getKind() == TemplateArgument::Declaration &&
1630         isSameDeclaration(Param.getAsDecl(), Arg.getAsDecl()) &&
1631         Param.isDeclForReferenceParam() == Arg.isDeclForReferenceParam())
1632       return Sema::TDK_Success;
1633 
1634     Info.FirstArg = Param;
1635     Info.SecondArg = Arg;
1636     return Sema::TDK_NonDeducedMismatch;
1637 
1638   case TemplateArgument::NullPtr:
1639     if (Arg.getKind() == TemplateArgument::NullPtr &&
1640         S.Context.hasSameType(Param.getNullPtrType(), Arg.getNullPtrType()))
1641       return Sema::TDK_Success;
1642 
1643     Info.FirstArg = Param;
1644     Info.SecondArg = Arg;
1645     return Sema::TDK_NonDeducedMismatch;
1646 
1647   case TemplateArgument::Integral:
1648     if (Arg.getKind() == TemplateArgument::Integral) {
1649       if (hasSameExtendedValue(Param.getAsIntegral(), Arg.getAsIntegral()))
1650         return Sema::TDK_Success;
1651 
1652       Info.FirstArg = Param;
1653       Info.SecondArg = Arg;
1654       return Sema::TDK_NonDeducedMismatch;
1655     }
1656 
1657     if (Arg.getKind() == TemplateArgument::Expression) {
1658       Info.FirstArg = Param;
1659       Info.SecondArg = Arg;
1660       return Sema::TDK_NonDeducedMismatch;
1661     }
1662 
1663     Info.FirstArg = Param;
1664     Info.SecondArg = Arg;
1665     return Sema::TDK_NonDeducedMismatch;
1666 
1667   case TemplateArgument::Expression: {
1668     if (NonTypeTemplateParmDecl *NTTP
1669           = getDeducedParameterFromExpr(Param.getAsExpr())) {
1670       if (Arg.getKind() == TemplateArgument::Integral)
1671         return DeduceNonTypeTemplateArgument(S, NTTP,
1672                                              Arg.getAsIntegral(),
1673                                              Arg.getIntegralType(),
1674                                              /*ArrayBound=*/false,
1675                                              Info, Deduced);
1676       if (Arg.getKind() == TemplateArgument::Expression)
1677         return DeduceNonTypeTemplateArgument(S, NTTP, Arg.getAsExpr(),
1678                                              Info, Deduced);
1679       if (Arg.getKind() == TemplateArgument::Declaration)
1680         return DeduceNonTypeTemplateArgument(S, NTTP, Arg.getAsDecl(),
1681                                              Info, Deduced);
1682 
1683       Info.FirstArg = Param;
1684       Info.SecondArg = Arg;
1685       return Sema::TDK_NonDeducedMismatch;
1686     }
1687 
1688     // Can't deduce anything, but that's okay.
1689     return Sema::TDK_Success;
1690   }
1691   case TemplateArgument::Pack:
1692     llvm_unreachable("Argument packs should be expanded by the caller!");
1693   }
1694 
1695   llvm_unreachable("Invalid TemplateArgument Kind!");
1696 }
1697 
1698 /// \brief Determine whether there is a template argument to be used for
1699 /// deduction.
1700 ///
1701 /// This routine "expands" argument packs in-place, overriding its input
1702 /// parameters so that \c Args[ArgIdx] will be the available template argument.
1703 ///
1704 /// \returns true if there is another template argument (which will be at
1705 /// \c Args[ArgIdx]), false otherwise.
1706 static bool hasTemplateArgumentForDeduction(const TemplateArgument *&Args,
1707                                             unsigned &ArgIdx,
1708                                             unsigned &NumArgs) {
1709   if (ArgIdx == NumArgs)
1710     return false;
1711 
1712   const TemplateArgument &Arg = Args[ArgIdx];
1713   if (Arg.getKind() != TemplateArgument::Pack)
1714     return true;
1715 
1716   assert(ArgIdx == NumArgs - 1 && "Pack not at the end of argument list?");
1717   Args = Arg.pack_begin();
1718   NumArgs = Arg.pack_size();
1719   ArgIdx = 0;
1720   return ArgIdx < NumArgs;
1721 }
1722 
1723 /// \brief Determine whether the given set of template arguments has a pack
1724 /// expansion that is not the last template argument.
1725 static bool hasPackExpansionBeforeEnd(const TemplateArgument *Args,
1726                                       unsigned NumArgs) {
1727   unsigned ArgIdx = 0;
1728   while (ArgIdx < NumArgs) {
1729     const TemplateArgument &Arg = Args[ArgIdx];
1730 
1731     // Unwrap argument packs.
1732     if (Args[ArgIdx].getKind() == TemplateArgument::Pack) {
1733       Args = Arg.pack_begin();
1734       NumArgs = Arg.pack_size();
1735       ArgIdx = 0;
1736       continue;
1737     }
1738 
1739     ++ArgIdx;
1740     if (ArgIdx == NumArgs)
1741       return false;
1742 
1743     if (Arg.isPackExpansion())
1744       return true;
1745   }
1746 
1747   return false;
1748 }
1749 
1750 static Sema::TemplateDeductionResult
1751 DeduceTemplateArguments(Sema &S,
1752                         TemplateParameterList *TemplateParams,
1753                         const TemplateArgument *Params, unsigned NumParams,
1754                         const TemplateArgument *Args, unsigned NumArgs,
1755                         TemplateDeductionInfo &Info,
1756                         SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
1757   // C++0x [temp.deduct.type]p9:
1758   //   If the template argument list of P contains a pack expansion that is not
1759   //   the last template argument, the entire template argument list is a
1760   //   non-deduced context.
1761   if (hasPackExpansionBeforeEnd(Params, NumParams))
1762     return Sema::TDK_Success;
1763 
1764   // C++0x [temp.deduct.type]p9:
1765   //   If P has a form that contains <T> or <i>, then each argument Pi of the
1766   //   respective template argument list P is compared with the corresponding
1767   //   argument Ai of the corresponding template argument list of A.
1768   unsigned ArgIdx = 0, ParamIdx = 0;
1769   for (; hasTemplateArgumentForDeduction(Params, ParamIdx, NumParams);
1770        ++ParamIdx) {
1771     if (!Params[ParamIdx].isPackExpansion()) {
1772       // The simple case: deduce template arguments by matching Pi and Ai.
1773 
1774       // Check whether we have enough arguments.
1775       if (!hasTemplateArgumentForDeduction(Args, ArgIdx, NumArgs))
1776         return Sema::TDK_Success;
1777 
1778       if (Args[ArgIdx].isPackExpansion()) {
1779         // FIXME: We follow the logic of C++0x [temp.deduct.type]p22 here,
1780         // but applied to pack expansions that are template arguments.
1781         return Sema::TDK_MiscellaneousDeductionFailure;
1782       }
1783 
1784       // Perform deduction for this Pi/Ai pair.
1785       if (Sema::TemplateDeductionResult Result
1786             = DeduceTemplateArguments(S, TemplateParams,
1787                                       Params[ParamIdx], Args[ArgIdx],
1788                                       Info, Deduced))
1789         return Result;
1790 
1791       // Move to the next argument.
1792       ++ArgIdx;
1793       continue;
1794     }
1795 
1796     // The parameter is a pack expansion.
1797 
1798     // C++0x [temp.deduct.type]p9:
1799     //   If Pi is a pack expansion, then the pattern of Pi is compared with
1800     //   each remaining argument in the template argument list of A. Each
1801     //   comparison deduces template arguments for subsequent positions in the
1802     //   template parameter packs expanded by Pi.
1803     TemplateArgument Pattern = Params[ParamIdx].getPackExpansionPattern();
1804 
1805     // Compute the set of template parameter indices that correspond to
1806     // parameter packs expanded by the pack expansion.
1807     SmallVector<unsigned, 2> PackIndices;
1808     {
1809       llvm::SmallBitVector SawIndices(TemplateParams->size());
1810       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
1811       S.collectUnexpandedParameterPacks(Pattern, Unexpanded);
1812       for (unsigned I = 0, N = Unexpanded.size(); I != N; ++I) {
1813         unsigned Depth, Index;
1814         llvm::tie(Depth, Index) = getDepthAndIndex(Unexpanded[I]);
1815         if (Depth == 0 && !SawIndices[Index]) {
1816           SawIndices[Index] = true;
1817           PackIndices.push_back(Index);
1818         }
1819       }
1820     }
1821     assert(!PackIndices.empty() && "Pack expansion without unexpanded packs?");
1822 
1823     // FIXME: If there are no remaining arguments, we can bail out early
1824     // and set any deduced parameter packs to an empty argument pack.
1825     // The latter part of this is a (minor) correctness issue.
1826 
1827     // Save the deduced template arguments for each parameter pack expanded
1828     // by this pack expansion, then clear out the deduction.
1829     SmallVector<DeducedTemplateArgument, 2>
1830       SavedPacks(PackIndices.size());
1831     SmallVector<SmallVector<DeducedTemplateArgument, 4>, 2>
1832       NewlyDeducedPacks(PackIndices.size());
1833     PrepareArgumentPackDeduction(S, Deduced, PackIndices, SavedPacks,
1834                                  NewlyDeducedPacks);
1835 
1836     // Keep track of the deduced template arguments for each parameter pack
1837     // expanded by this pack expansion (the outer index) and for each
1838     // template argument (the inner SmallVectors).
1839     bool HasAnyArguments = false;
1840     while (hasTemplateArgumentForDeduction(Args, ArgIdx, NumArgs)) {
1841       HasAnyArguments = true;
1842 
1843       // Deduce template arguments from the pattern.
1844       if (Sema::TemplateDeductionResult Result
1845             = DeduceTemplateArguments(S, TemplateParams, Pattern, Args[ArgIdx],
1846                                       Info, Deduced))
1847         return Result;
1848 
1849       // Capture the deduced template arguments for each parameter pack expanded
1850       // by this pack expansion, add them to the list of arguments we've deduced
1851       // for that pack, then clear out the deduced argument.
1852       for (unsigned I = 0, N = PackIndices.size(); I != N; ++I) {
1853         DeducedTemplateArgument &DeducedArg = Deduced[PackIndices[I]];
1854         if (!DeducedArg.isNull()) {
1855           NewlyDeducedPacks[I].push_back(DeducedArg);
1856           DeducedArg = DeducedTemplateArgument();
1857         }
1858       }
1859 
1860       ++ArgIdx;
1861     }
1862 
1863     // Build argument packs for each of the parameter packs expanded by this
1864     // pack expansion.
1865     if (Sema::TemplateDeductionResult Result
1866           = FinishArgumentPackDeduction(S, TemplateParams, HasAnyArguments,
1867                                         Deduced, PackIndices, SavedPacks,
1868                                         NewlyDeducedPacks, Info))
1869       return Result;
1870   }
1871 
1872   return Sema::TDK_Success;
1873 }
1874 
1875 static Sema::TemplateDeductionResult
1876 DeduceTemplateArguments(Sema &S,
1877                         TemplateParameterList *TemplateParams,
1878                         const TemplateArgumentList &ParamList,
1879                         const TemplateArgumentList &ArgList,
1880                         TemplateDeductionInfo &Info,
1881                     SmallVectorImpl<DeducedTemplateArgument> &Deduced) {
1882   return DeduceTemplateArguments(S, TemplateParams,
1883                                  ParamList.data(), ParamList.size(),
1884                                  ArgList.data(), ArgList.size(),
1885                                  Info, Deduced);
1886 }
1887 
1888 /// \brief Determine whether two template arguments are the same.
1889 static bool isSameTemplateArg(ASTContext &Context,
1890                               const TemplateArgument &X,
1891                               const TemplateArgument &Y) {
1892   if (X.getKind() != Y.getKind())
1893     return false;
1894 
1895   switch (X.getKind()) {
1896     case TemplateArgument::Null:
1897       llvm_unreachable("Comparing NULL template argument");
1898 
1899     case TemplateArgument::Type:
1900       return Context.getCanonicalType(X.getAsType()) ==
1901              Context.getCanonicalType(Y.getAsType());
1902 
1903     case TemplateArgument::Declaration:
1904       return isSameDeclaration(X.getAsDecl(), Y.getAsDecl()) &&
1905              X.isDeclForReferenceParam() == Y.isDeclForReferenceParam();
1906 
1907     case TemplateArgument::NullPtr:
1908       return Context.hasSameType(X.getNullPtrType(), Y.getNullPtrType());
1909 
1910     case TemplateArgument::Template:
1911     case TemplateArgument::TemplateExpansion:
1912       return Context.getCanonicalTemplateName(
1913                     X.getAsTemplateOrTemplatePattern()).getAsVoidPointer() ==
1914              Context.getCanonicalTemplateName(
1915                     Y.getAsTemplateOrTemplatePattern()).getAsVoidPointer();
1916 
1917     case TemplateArgument::Integral:
1918       return X.getAsIntegral() == Y.getAsIntegral();
1919 
1920     case TemplateArgument::Expression: {
1921       llvm::FoldingSetNodeID XID, YID;
1922       X.getAsExpr()->Profile(XID, Context, true);
1923       Y.getAsExpr()->Profile(YID, Context, true);
1924       return XID == YID;
1925     }
1926 
1927     case TemplateArgument::Pack:
1928       if (X.pack_size() != Y.pack_size())
1929         return false;
1930 
1931       for (TemplateArgument::pack_iterator XP = X.pack_begin(),
1932                                         XPEnd = X.pack_end(),
1933                                            YP = Y.pack_begin();
1934            XP != XPEnd; ++XP, ++YP)
1935         if (!isSameTemplateArg(Context, *XP, *YP))
1936           return false;
1937 
1938       return true;
1939   }
1940 
1941   llvm_unreachable("Invalid TemplateArgument Kind!");
1942 }
1943 
1944 /// \brief Allocate a TemplateArgumentLoc where all locations have
1945 /// been initialized to the given location.
1946 ///
1947 /// \param S The semantic analysis object.
1948 ///
1949 /// \param Arg The template argument we are producing template argument
1950 /// location information for.
1951 ///
1952 /// \param NTTPType For a declaration template argument, the type of
1953 /// the non-type template parameter that corresponds to this template
1954 /// argument.
1955 ///
1956 /// \param Loc The source location to use for the resulting template
1957 /// argument.
1958 static TemplateArgumentLoc
1959 getTrivialTemplateArgumentLoc(Sema &S,
1960                               const TemplateArgument &Arg,
1961                               QualType NTTPType,
1962                               SourceLocation Loc) {
1963   switch (Arg.getKind()) {
1964   case TemplateArgument::Null:
1965     llvm_unreachable("Can't get a NULL template argument here");
1966 
1967   case TemplateArgument::Type:
1968     return TemplateArgumentLoc(Arg,
1969                      S.Context.getTrivialTypeSourceInfo(Arg.getAsType(), Loc));
1970 
1971   case TemplateArgument::Declaration: {
1972     Expr *E
1973       = S.BuildExpressionFromDeclTemplateArgument(Arg, NTTPType, Loc)
1974           .takeAs<Expr>();
1975     return TemplateArgumentLoc(TemplateArgument(E), E);
1976   }
1977 
1978   case TemplateArgument::NullPtr: {
1979     Expr *E
1980       = S.BuildExpressionFromDeclTemplateArgument(Arg, NTTPType, Loc)
1981           .takeAs<Expr>();
1982     return TemplateArgumentLoc(TemplateArgument(NTTPType, /*isNullPtr*/true),
1983                                E);
1984   }
1985 
1986   case TemplateArgument::Integral: {
1987     Expr *E
1988       = S.BuildExpressionFromIntegralTemplateArgument(Arg, Loc).takeAs<Expr>();
1989     return TemplateArgumentLoc(TemplateArgument(E), E);
1990   }
1991 
1992     case TemplateArgument::Template:
1993     case TemplateArgument::TemplateExpansion: {
1994       NestedNameSpecifierLocBuilder Builder;
1995       TemplateName Template = Arg.getAsTemplate();
1996       if (DependentTemplateName *DTN = Template.getAsDependentTemplateName())
1997         Builder.MakeTrivial(S.Context, DTN->getQualifier(), Loc);
1998       else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
1999         Builder.MakeTrivial(S.Context, QTN->getQualifier(), Loc);
2000 
2001       if (Arg.getKind() == TemplateArgument::Template)
2002         return TemplateArgumentLoc(Arg,
2003                                    Builder.getWithLocInContext(S.Context),
2004                                    Loc);
2005 
2006 
2007       return TemplateArgumentLoc(Arg, Builder.getWithLocInContext(S.Context),
2008                                  Loc, Loc);
2009     }
2010 
2011   case TemplateArgument::Expression:
2012     return TemplateArgumentLoc(Arg, Arg.getAsExpr());
2013 
2014   case TemplateArgument::Pack:
2015     return TemplateArgumentLoc(Arg, TemplateArgumentLocInfo());
2016   }
2017 
2018   llvm_unreachable("Invalid TemplateArgument Kind!");
2019 }
2020 
2021 
2022 /// \brief Convert the given deduced template argument and add it to the set of
2023 /// fully-converted template arguments.
2024 static bool ConvertDeducedTemplateArgument(Sema &S, NamedDecl *Param,
2025                                            DeducedTemplateArgument Arg,
2026                                            NamedDecl *Template,
2027                                            QualType NTTPType,
2028                                            unsigned ArgumentPackIndex,
2029                                            TemplateDeductionInfo &Info,
2030                                            bool InFunctionTemplate,
2031                              SmallVectorImpl<TemplateArgument> &Output) {
2032   if (Arg.getKind() == TemplateArgument::Pack) {
2033     // This is a template argument pack, so check each of its arguments against
2034     // the template parameter.
2035     SmallVector<TemplateArgument, 2> PackedArgsBuilder;
2036     for (TemplateArgument::pack_iterator PA = Arg.pack_begin(),
2037                                       PAEnd = Arg.pack_end();
2038          PA != PAEnd; ++PA) {
2039       // When converting the deduced template argument, append it to the
2040       // general output list. We need to do this so that the template argument
2041       // checking logic has all of the prior template arguments available.
2042       DeducedTemplateArgument InnerArg(*PA);
2043       InnerArg.setDeducedFromArrayBound(Arg.wasDeducedFromArrayBound());
2044       if (ConvertDeducedTemplateArgument(S, Param, InnerArg, Template,
2045                                          NTTPType, PackedArgsBuilder.size(),
2046                                          Info, InFunctionTemplate, Output))
2047         return true;
2048 
2049       // Move the converted template argument into our argument pack.
2050       PackedArgsBuilder.push_back(Output.back());
2051       Output.pop_back();
2052     }
2053 
2054     // Create the resulting argument pack.
2055     Output.push_back(TemplateArgument::CreatePackCopy(S.Context,
2056                                                       PackedArgsBuilder.data(),
2057                                                      PackedArgsBuilder.size()));
2058     return false;
2059   }
2060 
2061   // Convert the deduced template argument into a template
2062   // argument that we can check, almost as if the user had written
2063   // the template argument explicitly.
2064   TemplateArgumentLoc ArgLoc = getTrivialTemplateArgumentLoc(S, Arg, NTTPType,
2065                                                              Info.getLocation());
2066 
2067   // Check the template argument, converting it as necessary.
2068   return S.CheckTemplateArgument(Param, ArgLoc,
2069                                  Template,
2070                                  Template->getLocation(),
2071                                  Template->getSourceRange().getEnd(),
2072                                  ArgumentPackIndex,
2073                                  Output,
2074                                  InFunctionTemplate
2075                                   ? (Arg.wasDeducedFromArrayBound()
2076                                        ? Sema::CTAK_DeducedFromArrayBound
2077                                        : Sema::CTAK_Deduced)
2078                                  : Sema::CTAK_Specified);
2079 }
2080 
2081 /// Complete template argument deduction for a class template partial
2082 /// specialization.
2083 static Sema::TemplateDeductionResult
2084 FinishTemplateArgumentDeduction(Sema &S,
2085                                 ClassTemplatePartialSpecializationDecl *Partial,
2086                                 const TemplateArgumentList &TemplateArgs,
2087                       SmallVectorImpl<DeducedTemplateArgument> &Deduced,
2088                                 TemplateDeductionInfo &Info) {
2089   // Unevaluated SFINAE context.
2090   EnterExpressionEvaluationContext Unevaluated(S, Sema::Unevaluated);
2091   Sema::SFINAETrap Trap(S);
2092 
2093   Sema::ContextRAII SavedContext(S, Partial);
2094 
2095   // C++ [temp.deduct.type]p2:
2096   //   [...] or if any template argument remains neither deduced nor
2097   //   explicitly specified, template argument deduction fails.
2098   SmallVector<TemplateArgument, 4> Builder;
2099   TemplateParameterList *PartialParams = Partial->getTemplateParameters();
2100   for (unsigned I = 0, N = PartialParams->size(); I != N; ++I) {
2101     NamedDecl *Param = PartialParams->getParam(I);
2102     if (Deduced[I].isNull()) {
2103       Info.Param = makeTemplateParameter(Param);
2104       return Sema::TDK_Incomplete;
2105     }
2106 
2107     // We have deduced this argument, so it still needs to be
2108     // checked and converted.
2109 
2110     // First, for a non-type template parameter type that is
2111     // initialized by a declaration, we need the type of the
2112     // corresponding non-type template parameter.
2113     QualType NTTPType;
2114     if (NonTypeTemplateParmDecl *NTTP
2115                                   = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
2116       NTTPType = NTTP->getType();
2117       if (NTTPType->isDependentType()) {
2118         TemplateArgumentList TemplateArgs(TemplateArgumentList::OnStack,
2119                                           Builder.data(), Builder.size());
2120         NTTPType = S.SubstType(NTTPType,
2121                                MultiLevelTemplateArgumentList(TemplateArgs),
2122                                NTTP->getLocation(),
2123                                NTTP->getDeclName());
2124         if (NTTPType.isNull()) {
2125           Info.Param = makeTemplateParameter(Param);
2126           // FIXME: These template arguments are temporary. Free them!
2127           Info.reset(TemplateArgumentList::CreateCopy(S.Context,
2128                                                       Builder.data(),
2129                                                       Builder.size()));
2130           return Sema::TDK_SubstitutionFailure;
2131         }
2132       }
2133     }
2134 
2135     if (ConvertDeducedTemplateArgument(S, Param, Deduced[I],
2136                                        Partial, NTTPType, 0, Info, false,
2137                                        Builder)) {
2138       Info.Param = makeTemplateParameter(Param);
2139       // FIXME: These template arguments are temporary. Free them!
2140       Info.reset(TemplateArgumentList::CreateCopy(S.Context, Builder.data(),
2141                                                   Builder.size()));
2142       return Sema::TDK_SubstitutionFailure;
2143     }
2144   }
2145 
2146   // Form the template argument list from the deduced template arguments.
2147   TemplateArgumentList *DeducedArgumentList
2148     = TemplateArgumentList::CreateCopy(S.Context, Builder.data(),
2149                                        Builder.size());
2150 
2151   Info.reset(DeducedArgumentList);
2152 
2153   // Substitute the deduced template arguments into the template
2154   // arguments of the class template partial specialization, and
2155   // verify that the instantiated template arguments are both valid
2156   // and are equivalent to the template arguments originally provided
2157   // to the class template.
2158   LocalInstantiationScope InstScope(S);
2159   ClassTemplateDecl *ClassTemplate = Partial->getSpecializedTemplate();
2160   const TemplateArgumentLoc *PartialTemplateArgs
2161     = Partial->getTemplateArgsAsWritten();
2162 
2163   // Note that we don't provide the langle and rangle locations.
2164   TemplateArgumentListInfo InstArgs;
2165 
2166   if (S.Subst(PartialTemplateArgs,
2167               Partial->getNumTemplateArgsAsWritten(),
2168               InstArgs, MultiLevelTemplateArgumentList(*DeducedArgumentList))) {
2169     unsigned ArgIdx = InstArgs.size(), ParamIdx = ArgIdx;
2170     if (ParamIdx >= Partial->getTemplateParameters()->size())
2171       ParamIdx = Partial->getTemplateParameters()->size() - 1;
2172 
2173     Decl *Param
2174       = const_cast<NamedDecl *>(
2175                           Partial->getTemplateParameters()->getParam(ParamIdx));
2176     Info.Param = makeTemplateParameter(Param);
2177     Info.FirstArg = PartialTemplateArgs[ArgIdx].getArgument();
2178     return Sema::TDK_SubstitutionFailure;
2179   }
2180 
2181   SmallVector<TemplateArgument, 4> ConvertedInstArgs;
2182   if (S.CheckTemplateArgumentList(ClassTemplate, Partial->getLocation(),
2183                                   InstArgs, false, ConvertedInstArgs))
2184     return Sema::TDK_SubstitutionFailure;
2185 
2186   TemplateParameterList *TemplateParams
2187     = ClassTemplate->getTemplateParameters();
2188   for (unsigned I = 0, E = TemplateParams->size(); I != E; ++I) {
2189     TemplateArgument InstArg = ConvertedInstArgs.data()[I];
2190     if (!isSameTemplateArg(S.Context, TemplateArgs[I], InstArg)) {
2191       Info.Param = makeTemplateParameter(TemplateParams->getParam(I));
2192       Info.FirstArg = TemplateArgs[I];
2193       Info.SecondArg = InstArg;
2194       return Sema::TDK_NonDeducedMismatch;
2195     }
2196   }
2197 
2198   if (Trap.hasErrorOccurred())
2199     return Sema::TDK_SubstitutionFailure;
2200 
2201   return Sema::TDK_Success;
2202 }
2203 
2204 /// \brief Perform template argument deduction to determine whether
2205 /// the given template arguments match the given class template
2206 /// partial specialization per C++ [temp.class.spec.match].
2207 Sema::TemplateDeductionResult
2208 Sema::DeduceTemplateArguments(ClassTemplatePartialSpecializationDecl *Partial,
2209                               const TemplateArgumentList &TemplateArgs,
2210                               TemplateDeductionInfo &Info) {
2211   if (Partial->isInvalidDecl())
2212     return TDK_Invalid;
2213 
2214   // C++ [temp.class.spec.match]p2:
2215   //   A partial specialization matches a given actual template
2216   //   argument list if the template arguments of the partial
2217   //   specialization can be deduced from the actual template argument
2218   //   list (14.8.2).
2219 
2220   // Unevaluated SFINAE context.
2221   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
2222   SFINAETrap Trap(*this);
2223 
2224   SmallVector<DeducedTemplateArgument, 4> Deduced;
2225   Deduced.resize(Partial->getTemplateParameters()->size());
2226   if (TemplateDeductionResult Result
2227         = ::DeduceTemplateArguments(*this,
2228                                     Partial->getTemplateParameters(),
2229                                     Partial->getTemplateArgs(),
2230                                     TemplateArgs, Info, Deduced))
2231     return Result;
2232 
2233   SmallVector<TemplateArgument, 4> DeducedArgs(Deduced.begin(), Deduced.end());
2234   InstantiatingTemplate Inst(*this, Partial->getLocation(), Partial,
2235                              DeducedArgs, Info);
2236   if (Inst)
2237     return TDK_InstantiationDepth;
2238 
2239   if (Trap.hasErrorOccurred())
2240     return Sema::TDK_SubstitutionFailure;
2241 
2242   return ::FinishTemplateArgumentDeduction(*this, Partial, TemplateArgs,
2243                                            Deduced, Info);
2244 }
2245 
2246 /// \brief Determine whether the given type T is a simple-template-id type.
2247 static bool isSimpleTemplateIdType(QualType T) {
2248   if (const TemplateSpecializationType *Spec
2249         = T->getAs<TemplateSpecializationType>())
2250     return Spec->getTemplateName().getAsTemplateDecl() != 0;
2251 
2252   return false;
2253 }
2254 
2255 /// \brief Substitute the explicitly-provided template arguments into the
2256 /// given function template according to C++ [temp.arg.explicit].
2257 ///
2258 /// \param FunctionTemplate the function template into which the explicit
2259 /// template arguments will be substituted.
2260 ///
2261 /// \param ExplicitTemplateArgs the explicitly-specified template
2262 /// arguments.
2263 ///
2264 /// \param Deduced the deduced template arguments, which will be populated
2265 /// with the converted and checked explicit template arguments.
2266 ///
2267 /// \param ParamTypes will be populated with the instantiated function
2268 /// parameters.
2269 ///
2270 /// \param FunctionType if non-NULL, the result type of the function template
2271 /// will also be instantiated and the pointed-to value will be updated with
2272 /// the instantiated function type.
2273 ///
2274 /// \param Info if substitution fails for any reason, this object will be
2275 /// populated with more information about the failure.
2276 ///
2277 /// \returns TDK_Success if substitution was successful, or some failure
2278 /// condition.
2279 Sema::TemplateDeductionResult
2280 Sema::SubstituteExplicitTemplateArguments(
2281                                       FunctionTemplateDecl *FunctionTemplate,
2282                                TemplateArgumentListInfo &ExplicitTemplateArgs,
2283                        SmallVectorImpl<DeducedTemplateArgument> &Deduced,
2284                                  SmallVectorImpl<QualType> &ParamTypes,
2285                                           QualType *FunctionType,
2286                                           TemplateDeductionInfo &Info) {
2287   FunctionDecl *Function = FunctionTemplate->getTemplatedDecl();
2288   TemplateParameterList *TemplateParams
2289     = FunctionTemplate->getTemplateParameters();
2290 
2291   if (ExplicitTemplateArgs.size() == 0) {
2292     // No arguments to substitute; just copy over the parameter types and
2293     // fill in the function type.
2294     for (FunctionDecl::param_iterator P = Function->param_begin(),
2295                                    PEnd = Function->param_end();
2296          P != PEnd;
2297          ++P)
2298       ParamTypes.push_back((*P)->getType());
2299 
2300     if (FunctionType)
2301       *FunctionType = Function->getType();
2302     return TDK_Success;
2303   }
2304 
2305   // Unevaluated SFINAE context.
2306   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
2307   SFINAETrap Trap(*this);
2308 
2309   // C++ [temp.arg.explicit]p3:
2310   //   Template arguments that are present shall be specified in the
2311   //   declaration order of their corresponding template-parameters. The
2312   //   template argument list shall not specify more template-arguments than
2313   //   there are corresponding template-parameters.
2314   SmallVector<TemplateArgument, 4> Builder;
2315 
2316   // Enter a new template instantiation context where we check the
2317   // explicitly-specified template arguments against this function template,
2318   // and then substitute them into the function parameter types.
2319   SmallVector<TemplateArgument, 4> DeducedArgs(Deduced.begin(), Deduced.end());
2320   InstantiatingTemplate Inst(*this, FunctionTemplate->getLocation(),
2321                              FunctionTemplate, DeducedArgs,
2322            ActiveTemplateInstantiation::ExplicitTemplateArgumentSubstitution,
2323                              Info);
2324   if (Inst)
2325     return TDK_InstantiationDepth;
2326 
2327   if (CheckTemplateArgumentList(FunctionTemplate,
2328                                 SourceLocation(),
2329                                 ExplicitTemplateArgs,
2330                                 true,
2331                                 Builder) || Trap.hasErrorOccurred()) {
2332     unsigned Index = Builder.size();
2333     if (Index >= TemplateParams->size())
2334       Index = TemplateParams->size() - 1;
2335     Info.Param = makeTemplateParameter(TemplateParams->getParam(Index));
2336     return TDK_InvalidExplicitArguments;
2337   }
2338 
2339   // Form the template argument list from the explicitly-specified
2340   // template arguments.
2341   TemplateArgumentList *ExplicitArgumentList
2342     = TemplateArgumentList::CreateCopy(Context, Builder.data(), Builder.size());
2343   Info.reset(ExplicitArgumentList);
2344 
2345   // Template argument deduction and the final substitution should be
2346   // done in the context of the templated declaration.  Explicit
2347   // argument substitution, on the other hand, needs to happen in the
2348   // calling context.
2349   ContextRAII SavedContext(*this, FunctionTemplate->getTemplatedDecl());
2350 
2351   // If we deduced template arguments for a template parameter pack,
2352   // note that the template argument pack is partially substituted and record
2353   // the explicit template arguments. They'll be used as part of deduction
2354   // for this template parameter pack.
2355   for (unsigned I = 0, N = Builder.size(); I != N; ++I) {
2356     const TemplateArgument &Arg = Builder[I];
2357     if (Arg.getKind() == TemplateArgument::Pack) {
2358       CurrentInstantiationScope->SetPartiallySubstitutedPack(
2359                                                  TemplateParams->getParam(I),
2360                                                              Arg.pack_begin(),
2361                                                              Arg.pack_size());
2362       break;
2363     }
2364   }
2365 
2366   const FunctionProtoType *Proto
2367     = Function->getType()->getAs<FunctionProtoType>();
2368   assert(Proto && "Function template does not have a prototype?");
2369 
2370   // Instantiate the types of each of the function parameters given the
2371   // explicitly-specified template arguments. If the function has a trailing
2372   // return type, substitute it after the arguments to ensure we substitute
2373   // in lexical order.
2374   if (Proto->hasTrailingReturn()) {
2375     if (SubstParmTypes(Function->getLocation(),
2376                        Function->param_begin(), Function->getNumParams(),
2377                        MultiLevelTemplateArgumentList(*ExplicitArgumentList),
2378                        ParamTypes))
2379       return TDK_SubstitutionFailure;
2380   }
2381 
2382   // Instantiate the return type.
2383   // FIXME: exception-specifications?
2384   QualType ResultType;
2385   {
2386     // C++11 [expr.prim.general]p3:
2387     //   If a declaration declares a member function or member function
2388     //   template of a class X, the expression this is a prvalue of type
2389     //   "pointer to cv-qualifier-seq X" between the optional cv-qualifer-seq
2390     //   and the end of the function-definition, member-declarator, or
2391     //   declarator.
2392     unsigned ThisTypeQuals = 0;
2393     CXXRecordDecl *ThisContext = 0;
2394     if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Function)) {
2395       ThisContext = Method->getParent();
2396       ThisTypeQuals = Method->getTypeQualifiers();
2397     }
2398 
2399     CXXThisScopeRAII ThisScope(*this, ThisContext, ThisTypeQuals,
2400                                getLangOpts().CPlusPlus11);
2401 
2402     ResultType = SubstType(Proto->getResultType(),
2403                    MultiLevelTemplateArgumentList(*ExplicitArgumentList),
2404                    Function->getTypeSpecStartLoc(),
2405                    Function->getDeclName());
2406     if (ResultType.isNull() || Trap.hasErrorOccurred())
2407       return TDK_SubstitutionFailure;
2408   }
2409 
2410   // Instantiate the types of each of the function parameters given the
2411   // explicitly-specified template arguments if we didn't do so earlier.
2412   if (!Proto->hasTrailingReturn() &&
2413       SubstParmTypes(Function->getLocation(),
2414                      Function->param_begin(), Function->getNumParams(),
2415                      MultiLevelTemplateArgumentList(*ExplicitArgumentList),
2416                      ParamTypes))
2417     return TDK_SubstitutionFailure;
2418 
2419   if (FunctionType) {
2420     *FunctionType = BuildFunctionType(ResultType, ParamTypes,
2421                                       Function->getLocation(),
2422                                       Function->getDeclName(),
2423                                       Proto->getExtProtoInfo());
2424     if (FunctionType->isNull() || Trap.hasErrorOccurred())
2425       return TDK_SubstitutionFailure;
2426   }
2427 
2428   // C++ [temp.arg.explicit]p2:
2429   //   Trailing template arguments that can be deduced (14.8.2) may be
2430   //   omitted from the list of explicit template-arguments. If all of the
2431   //   template arguments can be deduced, they may all be omitted; in this
2432   //   case, the empty template argument list <> itself may also be omitted.
2433   //
2434   // Take all of the explicitly-specified arguments and put them into
2435   // the set of deduced template arguments. Explicitly-specified
2436   // parameter packs, however, will be set to NULL since the deduction
2437   // mechanisms handle explicitly-specified argument packs directly.
2438   Deduced.reserve(TemplateParams->size());
2439   for (unsigned I = 0, N = ExplicitArgumentList->size(); I != N; ++I) {
2440     const TemplateArgument &Arg = ExplicitArgumentList->get(I);
2441     if (Arg.getKind() == TemplateArgument::Pack)
2442       Deduced.push_back(DeducedTemplateArgument());
2443     else
2444       Deduced.push_back(Arg);
2445   }
2446 
2447   return TDK_Success;
2448 }
2449 
2450 /// \brief Check whether the deduced argument type for a call to a function
2451 /// template matches the actual argument type per C++ [temp.deduct.call]p4.
2452 static bool
2453 CheckOriginalCallArgDeduction(Sema &S, Sema::OriginalCallArg OriginalArg,
2454                               QualType DeducedA) {
2455   ASTContext &Context = S.Context;
2456 
2457   QualType A = OriginalArg.OriginalArgType;
2458   QualType OriginalParamType = OriginalArg.OriginalParamType;
2459 
2460   // Check for type equality (top-level cv-qualifiers are ignored).
2461   if (Context.hasSameUnqualifiedType(A, DeducedA))
2462     return false;
2463 
2464   // Strip off references on the argument types; they aren't needed for
2465   // the following checks.
2466   if (const ReferenceType *DeducedARef = DeducedA->getAs<ReferenceType>())
2467     DeducedA = DeducedARef->getPointeeType();
2468   if (const ReferenceType *ARef = A->getAs<ReferenceType>())
2469     A = ARef->getPointeeType();
2470 
2471   // C++ [temp.deduct.call]p4:
2472   //   [...] However, there are three cases that allow a difference:
2473   //     - If the original P is a reference type, the deduced A (i.e., the
2474   //       type referred to by the reference) can be more cv-qualified than
2475   //       the transformed A.
2476   if (const ReferenceType *OriginalParamRef
2477       = OriginalParamType->getAs<ReferenceType>()) {
2478     // We don't want to keep the reference around any more.
2479     OriginalParamType = OriginalParamRef->getPointeeType();
2480 
2481     Qualifiers AQuals = A.getQualifiers();
2482     Qualifiers DeducedAQuals = DeducedA.getQualifiers();
2483 
2484     // Under Objective-C++ ARC, the deduced type may have implicitly been
2485     // given strong lifetime. If so, update the original qualifiers to
2486     // include this strong lifetime.
2487     if (S.getLangOpts().ObjCAutoRefCount &&
2488         DeducedAQuals.getObjCLifetime() == Qualifiers::OCL_Strong &&
2489         AQuals.getObjCLifetime() == Qualifiers::OCL_None) {
2490       AQuals.setObjCLifetime(Qualifiers::OCL_Strong);
2491     }
2492 
2493     if (AQuals == DeducedAQuals) {
2494       // Qualifiers match; there's nothing to do.
2495     } else if (!DeducedAQuals.compatiblyIncludes(AQuals)) {
2496       return true;
2497     } else {
2498       // Qualifiers are compatible, so have the argument type adopt the
2499       // deduced argument type's qualifiers as if we had performed the
2500       // qualification conversion.
2501       A = Context.getQualifiedType(A.getUnqualifiedType(), DeducedAQuals);
2502     }
2503   }
2504 
2505   //    - The transformed A can be another pointer or pointer to member
2506   //      type that can be converted to the deduced A via a qualification
2507   //      conversion.
2508   //
2509   // Also allow conversions which merely strip [[noreturn]] from function types
2510   // (recursively) as an extension.
2511   // FIXME: Currently, this doesn't place nicely with qualfication conversions.
2512   bool ObjCLifetimeConversion = false;
2513   QualType ResultTy;
2514   if ((A->isAnyPointerType() || A->isMemberPointerType()) &&
2515       (S.IsQualificationConversion(A, DeducedA, false,
2516                                    ObjCLifetimeConversion) ||
2517        S.IsNoReturnConversion(A, DeducedA, ResultTy)))
2518     return false;
2519 
2520 
2521   //    - If P is a class and P has the form simple-template-id, then the
2522   //      transformed A can be a derived class of the deduced A. [...]
2523   //     [...] Likewise, if P is a pointer to a class of the form
2524   //      simple-template-id, the transformed A can be a pointer to a
2525   //      derived class pointed to by the deduced A.
2526   if (const PointerType *OriginalParamPtr
2527       = OriginalParamType->getAs<PointerType>()) {
2528     if (const PointerType *DeducedAPtr = DeducedA->getAs<PointerType>()) {
2529       if (const PointerType *APtr = A->getAs<PointerType>()) {
2530         if (A->getPointeeType()->isRecordType()) {
2531           OriginalParamType = OriginalParamPtr->getPointeeType();
2532           DeducedA = DeducedAPtr->getPointeeType();
2533           A = APtr->getPointeeType();
2534         }
2535       }
2536     }
2537   }
2538 
2539   if (Context.hasSameUnqualifiedType(A, DeducedA))
2540     return false;
2541 
2542   if (A->isRecordType() && isSimpleTemplateIdType(OriginalParamType) &&
2543       S.IsDerivedFrom(A, DeducedA))
2544     return false;
2545 
2546   return true;
2547 }
2548 
2549 /// \brief Finish template argument deduction for a function template,
2550 /// checking the deduced template arguments for completeness and forming
2551 /// the function template specialization.
2552 ///
2553 /// \param OriginalCallArgs If non-NULL, the original call arguments against
2554 /// which the deduced argument types should be compared.
2555 Sema::TemplateDeductionResult
2556 Sema::FinishTemplateArgumentDeduction(FunctionTemplateDecl *FunctionTemplate,
2557                        SmallVectorImpl<DeducedTemplateArgument> &Deduced,
2558                                       unsigned NumExplicitlySpecified,
2559                                       FunctionDecl *&Specialization,
2560                                       TemplateDeductionInfo &Info,
2561         SmallVectorImpl<OriginalCallArg> const *OriginalCallArgs) {
2562   TemplateParameterList *TemplateParams
2563     = FunctionTemplate->getTemplateParameters();
2564 
2565   // Unevaluated SFINAE context.
2566   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
2567   SFINAETrap Trap(*this);
2568 
2569   // Enter a new template instantiation context while we instantiate the
2570   // actual function declaration.
2571   SmallVector<TemplateArgument, 4> DeducedArgs(Deduced.begin(), Deduced.end());
2572   InstantiatingTemplate Inst(*this, FunctionTemplate->getLocation(),
2573                              FunctionTemplate, DeducedArgs,
2574               ActiveTemplateInstantiation::DeducedTemplateArgumentSubstitution,
2575                              Info);
2576   if (Inst)
2577     return TDK_InstantiationDepth;
2578 
2579   ContextRAII SavedContext(*this, FunctionTemplate->getTemplatedDecl());
2580 
2581   // C++ [temp.deduct.type]p2:
2582   //   [...] or if any template argument remains neither deduced nor
2583   //   explicitly specified, template argument deduction fails.
2584   SmallVector<TemplateArgument, 4> Builder;
2585   for (unsigned I = 0, N = TemplateParams->size(); I != N; ++I) {
2586     NamedDecl *Param = TemplateParams->getParam(I);
2587 
2588     if (!Deduced[I].isNull()) {
2589       if (I < NumExplicitlySpecified) {
2590         // We have already fully type-checked and converted this
2591         // argument, because it was explicitly-specified. Just record the
2592         // presence of this argument.
2593         Builder.push_back(Deduced[I]);
2594         continue;
2595       }
2596 
2597       // We have deduced this argument, so it still needs to be
2598       // checked and converted.
2599 
2600       // First, for a non-type template parameter type that is
2601       // initialized by a declaration, we need the type of the
2602       // corresponding non-type template parameter.
2603       QualType NTTPType;
2604       if (NonTypeTemplateParmDecl *NTTP
2605                                 = dyn_cast<NonTypeTemplateParmDecl>(Param)) {
2606         NTTPType = NTTP->getType();
2607         if (NTTPType->isDependentType()) {
2608           TemplateArgumentList TemplateArgs(TemplateArgumentList::OnStack,
2609                                             Builder.data(), Builder.size());
2610           NTTPType = SubstType(NTTPType,
2611                                MultiLevelTemplateArgumentList(TemplateArgs),
2612                                NTTP->getLocation(),
2613                                NTTP->getDeclName());
2614           if (NTTPType.isNull()) {
2615             Info.Param = makeTemplateParameter(Param);
2616             // FIXME: These template arguments are temporary. Free them!
2617             Info.reset(TemplateArgumentList::CreateCopy(Context,
2618                                                         Builder.data(),
2619                                                         Builder.size()));
2620             return TDK_SubstitutionFailure;
2621           }
2622         }
2623       }
2624 
2625       if (ConvertDeducedTemplateArgument(*this, Param, Deduced[I],
2626                                          FunctionTemplate, NTTPType, 0, Info,
2627                                          true, Builder)) {
2628         Info.Param = makeTemplateParameter(Param);
2629         // FIXME: These template arguments are temporary. Free them!
2630         Info.reset(TemplateArgumentList::CreateCopy(Context, Builder.data(),
2631                                                     Builder.size()));
2632         return TDK_SubstitutionFailure;
2633       }
2634 
2635       continue;
2636     }
2637 
2638     // C++0x [temp.arg.explicit]p3:
2639     //    A trailing template parameter pack (14.5.3) not otherwise deduced will
2640     //    be deduced to an empty sequence of template arguments.
2641     // FIXME: Where did the word "trailing" come from?
2642     if (Param->isTemplateParameterPack()) {
2643       // We may have had explicitly-specified template arguments for this
2644       // template parameter pack. If so, our empty deduction extends the
2645       // explicitly-specified set (C++0x [temp.arg.explicit]p9).
2646       const TemplateArgument *ExplicitArgs;
2647       unsigned NumExplicitArgs;
2648       if (CurrentInstantiationScope &&
2649           CurrentInstantiationScope->getPartiallySubstitutedPack(&ExplicitArgs,
2650                                                              &NumExplicitArgs)
2651             == Param) {
2652         Builder.push_back(TemplateArgument(ExplicitArgs, NumExplicitArgs));
2653 
2654         // Forget the partially-substituted pack; it's substitution is now
2655         // complete.
2656         CurrentInstantiationScope->ResetPartiallySubstitutedPack();
2657       } else {
2658         Builder.push_back(TemplateArgument::getEmptyPack());
2659       }
2660       continue;
2661     }
2662 
2663     // Substitute into the default template argument, if available.
2664     TemplateArgumentLoc DefArg
2665       = SubstDefaultTemplateArgumentIfAvailable(FunctionTemplate,
2666                                               FunctionTemplate->getLocation(),
2667                                   FunctionTemplate->getSourceRange().getEnd(),
2668                                                 Param,
2669                                                 Builder);
2670 
2671     // If there was no default argument, deduction is incomplete.
2672     if (DefArg.getArgument().isNull()) {
2673       Info.Param = makeTemplateParameter(
2674                          const_cast<NamedDecl *>(TemplateParams->getParam(I)));
2675       return TDK_Incomplete;
2676     }
2677 
2678     // Check whether we can actually use the default argument.
2679     if (CheckTemplateArgument(Param, DefArg,
2680                               FunctionTemplate,
2681                               FunctionTemplate->getLocation(),
2682                               FunctionTemplate->getSourceRange().getEnd(),
2683                               0, Builder,
2684                               CTAK_Specified)) {
2685       Info.Param = makeTemplateParameter(
2686                          const_cast<NamedDecl *>(TemplateParams->getParam(I)));
2687       // FIXME: These template arguments are temporary. Free them!
2688       Info.reset(TemplateArgumentList::CreateCopy(Context, Builder.data(),
2689                                                   Builder.size()));
2690       return TDK_SubstitutionFailure;
2691     }
2692 
2693     // If we get here, we successfully used the default template argument.
2694   }
2695 
2696   // Form the template argument list from the deduced template arguments.
2697   TemplateArgumentList *DeducedArgumentList
2698     = TemplateArgumentList::CreateCopy(Context, Builder.data(), Builder.size());
2699   Info.reset(DeducedArgumentList);
2700 
2701   // Substitute the deduced template arguments into the function template
2702   // declaration to produce the function template specialization.
2703   DeclContext *Owner = FunctionTemplate->getDeclContext();
2704   if (FunctionTemplate->getFriendObjectKind())
2705     Owner = FunctionTemplate->getLexicalDeclContext();
2706   Specialization = cast_or_null<FunctionDecl>(
2707                       SubstDecl(FunctionTemplate->getTemplatedDecl(), Owner,
2708                          MultiLevelTemplateArgumentList(*DeducedArgumentList)));
2709   if (!Specialization || Specialization->isInvalidDecl())
2710     return TDK_SubstitutionFailure;
2711 
2712   assert(Specialization->getPrimaryTemplate()->getCanonicalDecl() ==
2713          FunctionTemplate->getCanonicalDecl());
2714 
2715   // If the template argument list is owned by the function template
2716   // specialization, release it.
2717   if (Specialization->getTemplateSpecializationArgs() == DeducedArgumentList &&
2718       !Trap.hasErrorOccurred())
2719     Info.take();
2720 
2721   // There may have been an error that did not prevent us from constructing a
2722   // declaration. Mark the declaration invalid and return with a substitution
2723   // failure.
2724   if (Trap.hasErrorOccurred()) {
2725     Specialization->setInvalidDecl(true);
2726     return TDK_SubstitutionFailure;
2727   }
2728 
2729   if (OriginalCallArgs) {
2730     // C++ [temp.deduct.call]p4:
2731     //   In general, the deduction process attempts to find template argument
2732     //   values that will make the deduced A identical to A (after the type A
2733     //   is transformed as described above). [...]
2734     for (unsigned I = 0, N = OriginalCallArgs->size(); I != N; ++I) {
2735       OriginalCallArg OriginalArg = (*OriginalCallArgs)[I];
2736       unsigned ParamIdx = OriginalArg.ArgIdx;
2737 
2738       if (ParamIdx >= Specialization->getNumParams())
2739         continue;
2740 
2741       QualType DeducedA = Specialization->getParamDecl(ParamIdx)->getType();
2742       if (CheckOriginalCallArgDeduction(*this, OriginalArg, DeducedA))
2743         return Sema::TDK_SubstitutionFailure;
2744     }
2745   }
2746 
2747   // If we suppressed any diagnostics while performing template argument
2748   // deduction, and if we haven't already instantiated this declaration,
2749   // keep track of these diagnostics. They'll be emitted if this specialization
2750   // is actually used.
2751   if (Info.diag_begin() != Info.diag_end()) {
2752     llvm::DenseMap<Decl *, SmallVector<PartialDiagnosticAt, 1> >::iterator
2753       Pos = SuppressedDiagnostics.find(Specialization->getCanonicalDecl());
2754     if (Pos == SuppressedDiagnostics.end())
2755         SuppressedDiagnostics[Specialization->getCanonicalDecl()]
2756           .append(Info.diag_begin(), Info.diag_end());
2757   }
2758 
2759   return TDK_Success;
2760 }
2761 
2762 /// Gets the type of a function for template-argument-deducton
2763 /// purposes when it's considered as part of an overload set.
2764 static QualType GetTypeOfFunction(ASTContext &Context,
2765                                   const OverloadExpr::FindResult &R,
2766                                   FunctionDecl *Fn) {
2767   if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(Fn))
2768     if (Method->isInstance()) {
2769       // An instance method that's referenced in a form that doesn't
2770       // look like a member pointer is just invalid.
2771       if (!R.HasFormOfMemberPointer) return QualType();
2772 
2773       return Context.getMemberPointerType(Fn->getType(),
2774                Context.getTypeDeclType(Method->getParent()).getTypePtr());
2775     }
2776 
2777   if (!R.IsAddressOfOperand) return Fn->getType();
2778   return Context.getPointerType(Fn->getType());
2779 }
2780 
2781 /// Apply the deduction rules for overload sets.
2782 ///
2783 /// \return the null type if this argument should be treated as an
2784 /// undeduced context
2785 static QualType
2786 ResolveOverloadForDeduction(Sema &S, TemplateParameterList *TemplateParams,
2787                             Expr *Arg, QualType ParamType,
2788                             bool ParamWasReference) {
2789 
2790   OverloadExpr::FindResult R = OverloadExpr::find(Arg);
2791 
2792   OverloadExpr *Ovl = R.Expression;
2793 
2794   // C++0x [temp.deduct.call]p4
2795   unsigned TDF = 0;
2796   if (ParamWasReference)
2797     TDF |= TDF_ParamWithReferenceType;
2798   if (R.IsAddressOfOperand)
2799     TDF |= TDF_IgnoreQualifiers;
2800 
2801   // C++0x [temp.deduct.call]p6:
2802   //   When P is a function type, pointer to function type, or pointer
2803   //   to member function type:
2804 
2805   if (!ParamType->isFunctionType() &&
2806       !ParamType->isFunctionPointerType() &&
2807       !ParamType->isMemberFunctionPointerType()) {
2808     if (Ovl->hasExplicitTemplateArgs()) {
2809       // But we can still look for an explicit specialization.
2810       if (FunctionDecl *ExplicitSpec
2811             = S.ResolveSingleFunctionTemplateSpecialization(Ovl))
2812         return GetTypeOfFunction(S.Context, R, ExplicitSpec);
2813     }
2814 
2815     return QualType();
2816   }
2817 
2818   // Gather the explicit template arguments, if any.
2819   TemplateArgumentListInfo ExplicitTemplateArgs;
2820   if (Ovl->hasExplicitTemplateArgs())
2821     Ovl->getExplicitTemplateArgs().copyInto(ExplicitTemplateArgs);
2822   QualType Match;
2823   for (UnresolvedSetIterator I = Ovl->decls_begin(),
2824          E = Ovl->decls_end(); I != E; ++I) {
2825     NamedDecl *D = (*I)->getUnderlyingDecl();
2826 
2827     if (FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D)) {
2828       //   - If the argument is an overload set containing one or more
2829       //     function templates, the parameter is treated as a
2830       //     non-deduced context.
2831       if (!Ovl->hasExplicitTemplateArgs())
2832         return QualType();
2833 
2834       // Otherwise, see if we can resolve a function type
2835       FunctionDecl *Specialization = 0;
2836       TemplateDeductionInfo Info(Ovl->getNameLoc());
2837       if (S.DeduceTemplateArguments(FunTmpl, &ExplicitTemplateArgs,
2838                                     Specialization, Info))
2839         continue;
2840 
2841       D = Specialization;
2842     }
2843 
2844     FunctionDecl *Fn = cast<FunctionDecl>(D);
2845     QualType ArgType = GetTypeOfFunction(S.Context, R, Fn);
2846     if (ArgType.isNull()) continue;
2847 
2848     // Function-to-pointer conversion.
2849     if (!ParamWasReference && ParamType->isPointerType() &&
2850         ArgType->isFunctionType())
2851       ArgType = S.Context.getPointerType(ArgType);
2852 
2853     //   - If the argument is an overload set (not containing function
2854     //     templates), trial argument deduction is attempted using each
2855     //     of the members of the set. If deduction succeeds for only one
2856     //     of the overload set members, that member is used as the
2857     //     argument value for the deduction. If deduction succeeds for
2858     //     more than one member of the overload set the parameter is
2859     //     treated as a non-deduced context.
2860 
2861     // We do all of this in a fresh context per C++0x [temp.deduct.type]p2:
2862     //   Type deduction is done independently for each P/A pair, and
2863     //   the deduced template argument values are then combined.
2864     // So we do not reject deductions which were made elsewhere.
2865     SmallVector<DeducedTemplateArgument, 8>
2866       Deduced(TemplateParams->size());
2867     TemplateDeductionInfo Info(Ovl->getNameLoc());
2868     Sema::TemplateDeductionResult Result
2869       = DeduceTemplateArgumentsByTypeMatch(S, TemplateParams, ParamType,
2870                                            ArgType, Info, Deduced, TDF);
2871     if (Result) continue;
2872     if (!Match.isNull()) return QualType();
2873     Match = ArgType;
2874   }
2875 
2876   return Match;
2877 }
2878 
2879 /// \brief Perform the adjustments to the parameter and argument types
2880 /// described in C++ [temp.deduct.call].
2881 ///
2882 /// \returns true if the caller should not attempt to perform any template
2883 /// argument deduction based on this P/A pair because the argument is an
2884 /// overloaded function set that could not be resolved.
2885 static bool AdjustFunctionParmAndArgTypesForDeduction(Sema &S,
2886                                           TemplateParameterList *TemplateParams,
2887                                                       QualType &ParamType,
2888                                                       QualType &ArgType,
2889                                                       Expr *Arg,
2890                                                       unsigned &TDF) {
2891   // C++0x [temp.deduct.call]p3:
2892   //   If P is a cv-qualified type, the top level cv-qualifiers of P's type
2893   //   are ignored for type deduction.
2894   if (ParamType.hasQualifiers())
2895     ParamType = ParamType.getUnqualifiedType();
2896   const ReferenceType *ParamRefType = ParamType->getAs<ReferenceType>();
2897   if (ParamRefType) {
2898     QualType PointeeType = ParamRefType->getPointeeType();
2899 
2900     // If the argument has incomplete array type, try to complete its type.
2901     if (ArgType->isIncompleteArrayType() && !S.RequireCompleteExprType(Arg, 0))
2902       ArgType = Arg->getType();
2903 
2904     //   [C++0x] If P is an rvalue reference to a cv-unqualified
2905     //   template parameter and the argument is an lvalue, the type
2906     //   "lvalue reference to A" is used in place of A for type
2907     //   deduction.
2908     if (isa<RValueReferenceType>(ParamType)) {
2909       if (!PointeeType.getQualifiers() &&
2910           isa<TemplateTypeParmType>(PointeeType) &&
2911           Arg->Classify(S.Context).isLValue() &&
2912           Arg->getType() != S.Context.OverloadTy &&
2913           Arg->getType() != S.Context.BoundMemberTy)
2914         ArgType = S.Context.getLValueReferenceType(ArgType);
2915     }
2916 
2917     //   [...] If P is a reference type, the type referred to by P is used
2918     //   for type deduction.
2919     ParamType = PointeeType;
2920   }
2921 
2922   // Overload sets usually make this parameter an undeduced
2923   // context, but there are sometimes special circumstances.
2924   if (ArgType == S.Context.OverloadTy) {
2925     ArgType = ResolveOverloadForDeduction(S, TemplateParams,
2926                                           Arg, ParamType,
2927                                           ParamRefType != 0);
2928     if (ArgType.isNull())
2929       return true;
2930   }
2931 
2932   if (ParamRefType) {
2933     // C++0x [temp.deduct.call]p3:
2934     //   [...] If P is of the form T&&, where T is a template parameter, and
2935     //   the argument is an lvalue, the type A& is used in place of A for
2936     //   type deduction.
2937     if (ParamRefType->isRValueReferenceType() &&
2938         ParamRefType->getAs<TemplateTypeParmType>() &&
2939         Arg->isLValue())
2940       ArgType = S.Context.getLValueReferenceType(ArgType);
2941   } else {
2942     // C++ [temp.deduct.call]p2:
2943     //   If P is not a reference type:
2944     //   - If A is an array type, the pointer type produced by the
2945     //     array-to-pointer standard conversion (4.2) is used in place of
2946     //     A for type deduction; otherwise,
2947     if (ArgType->isArrayType())
2948       ArgType = S.Context.getArrayDecayedType(ArgType);
2949     //   - If A is a function type, the pointer type produced by the
2950     //     function-to-pointer standard conversion (4.3) is used in place
2951     //     of A for type deduction; otherwise,
2952     else if (ArgType->isFunctionType())
2953       ArgType = S.Context.getPointerType(ArgType);
2954     else {
2955       // - If A is a cv-qualified type, the top level cv-qualifiers of A's
2956       //   type are ignored for type deduction.
2957       ArgType = ArgType.getUnqualifiedType();
2958     }
2959   }
2960 
2961   // C++0x [temp.deduct.call]p4:
2962   //   In general, the deduction process attempts to find template argument
2963   //   values that will make the deduced A identical to A (after the type A
2964   //   is transformed as described above). [...]
2965   TDF = TDF_SkipNonDependent;
2966 
2967   //     - If the original P is a reference type, the deduced A (i.e., the
2968   //       type referred to by the reference) can be more cv-qualified than
2969   //       the transformed A.
2970   if (ParamRefType)
2971     TDF |= TDF_ParamWithReferenceType;
2972   //     - The transformed A can be another pointer or pointer to member
2973   //       type that can be converted to the deduced A via a qualification
2974   //       conversion (4.4).
2975   if (ArgType->isPointerType() || ArgType->isMemberPointerType() ||
2976       ArgType->isObjCObjectPointerType())
2977     TDF |= TDF_IgnoreQualifiers;
2978   //     - If P is a class and P has the form simple-template-id, then the
2979   //       transformed A can be a derived class of the deduced A. Likewise,
2980   //       if P is a pointer to a class of the form simple-template-id, the
2981   //       transformed A can be a pointer to a derived class pointed to by
2982   //       the deduced A.
2983   if (isSimpleTemplateIdType(ParamType) ||
2984       (isa<PointerType>(ParamType) &&
2985        isSimpleTemplateIdType(
2986                               ParamType->getAs<PointerType>()->getPointeeType())))
2987     TDF |= TDF_DerivedClass;
2988 
2989   return false;
2990 }
2991 
2992 static bool hasDeducibleTemplateParameters(Sema &S,
2993                                            FunctionTemplateDecl *FunctionTemplate,
2994                                            QualType T);
2995 
2996 /// \brief Perform template argument deduction by matching a parameter type
2997 ///        against a single expression, where the expression is an element of
2998 ///        an initializer list that was originally matched against a parameter
2999 ///        of type \c initializer_list\<ParamType\>.
3000 static Sema::TemplateDeductionResult
3001 DeduceTemplateArgumentByListElement(Sema &S,
3002                                     TemplateParameterList *TemplateParams,
3003                                     QualType ParamType, Expr *Arg,
3004                                     TemplateDeductionInfo &Info,
3005                               SmallVectorImpl<DeducedTemplateArgument> &Deduced,
3006                                     unsigned TDF) {
3007   // Handle the case where an init list contains another init list as the
3008   // element.
3009   if (InitListExpr *ILE = dyn_cast<InitListExpr>(Arg)) {
3010     QualType X;
3011     if (!S.isStdInitializerList(ParamType.getNonReferenceType(), &X))
3012       return Sema::TDK_Success; // Just ignore this expression.
3013 
3014     // Recurse down into the init list.
3015     for (unsigned i = 0, e = ILE->getNumInits(); i < e; ++i) {
3016       if (Sema::TemplateDeductionResult Result =
3017             DeduceTemplateArgumentByListElement(S, TemplateParams, X,
3018                                                  ILE->getInit(i),
3019                                                  Info, Deduced, TDF))
3020         return Result;
3021     }
3022     return Sema::TDK_Success;
3023   }
3024 
3025   // For all other cases, just match by type.
3026   QualType ArgType = Arg->getType();
3027   if (AdjustFunctionParmAndArgTypesForDeduction(S, TemplateParams, ParamType,
3028                                                 ArgType, Arg, TDF)) {
3029     Info.Expression = Arg;
3030     return Sema::TDK_FailedOverloadResolution;
3031   }
3032   return DeduceTemplateArgumentsByTypeMatch(S, TemplateParams, ParamType,
3033                                             ArgType, Info, Deduced, TDF);
3034 }
3035 
3036 /// \brief Perform template argument deduction from a function call
3037 /// (C++ [temp.deduct.call]).
3038 ///
3039 /// \param FunctionTemplate the function template for which we are performing
3040 /// template argument deduction.
3041 ///
3042 /// \param ExplicitTemplateArgs the explicit template arguments provided
3043 /// for this call.
3044 ///
3045 /// \param Args the function call arguments
3046 ///
3047 /// \param Specialization if template argument deduction was successful,
3048 /// this will be set to the function template specialization produced by
3049 /// template argument deduction.
3050 ///
3051 /// \param Info the argument will be updated to provide additional information
3052 /// about template argument deduction.
3053 ///
3054 /// \returns the result of template argument deduction.
3055 Sema::TemplateDeductionResult
3056 Sema::DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
3057                               TemplateArgumentListInfo *ExplicitTemplateArgs,
3058                               llvm::ArrayRef<Expr *> Args,
3059                               FunctionDecl *&Specialization,
3060                               TemplateDeductionInfo &Info) {
3061   if (FunctionTemplate->isInvalidDecl())
3062     return TDK_Invalid;
3063 
3064   FunctionDecl *Function = FunctionTemplate->getTemplatedDecl();
3065 
3066   // C++ [temp.deduct.call]p1:
3067   //   Template argument deduction is done by comparing each function template
3068   //   parameter type (call it P) with the type of the corresponding argument
3069   //   of the call (call it A) as described below.
3070   unsigned CheckArgs = Args.size();
3071   if (Args.size() < Function->getMinRequiredArguments())
3072     return TDK_TooFewArguments;
3073   else if (Args.size() > Function->getNumParams()) {
3074     const FunctionProtoType *Proto
3075       = Function->getType()->getAs<FunctionProtoType>();
3076     if (Proto->isTemplateVariadic())
3077       /* Do nothing */;
3078     else if (Proto->isVariadic())
3079       CheckArgs = Function->getNumParams();
3080     else
3081       return TDK_TooManyArguments;
3082   }
3083 
3084   // The types of the parameters from which we will perform template argument
3085   // deduction.
3086   LocalInstantiationScope InstScope(*this);
3087   TemplateParameterList *TemplateParams
3088     = FunctionTemplate->getTemplateParameters();
3089   SmallVector<DeducedTemplateArgument, 4> Deduced;
3090   SmallVector<QualType, 4> ParamTypes;
3091   unsigned NumExplicitlySpecified = 0;
3092   if (ExplicitTemplateArgs) {
3093     TemplateDeductionResult Result =
3094       SubstituteExplicitTemplateArguments(FunctionTemplate,
3095                                           *ExplicitTemplateArgs,
3096                                           Deduced,
3097                                           ParamTypes,
3098                                           0,
3099                                           Info);
3100     if (Result)
3101       return Result;
3102 
3103     NumExplicitlySpecified = Deduced.size();
3104   } else {
3105     // Just fill in the parameter types from the function declaration.
3106     for (unsigned I = 0, N = Function->getNumParams(); I != N; ++I)
3107       ParamTypes.push_back(Function->getParamDecl(I)->getType());
3108   }
3109 
3110   // Deduce template arguments from the function parameters.
3111   Deduced.resize(TemplateParams->size());
3112   unsigned ArgIdx = 0;
3113   SmallVector<OriginalCallArg, 4> OriginalCallArgs;
3114   for (unsigned ParamIdx = 0, NumParams = ParamTypes.size();
3115        ParamIdx != NumParams; ++ParamIdx) {
3116     QualType OrigParamType = ParamTypes[ParamIdx];
3117     QualType ParamType = OrigParamType;
3118 
3119     const PackExpansionType *ParamExpansion
3120       = dyn_cast<PackExpansionType>(ParamType);
3121     if (!ParamExpansion) {
3122       // Simple case: matching a function parameter to a function argument.
3123       if (ArgIdx >= CheckArgs)
3124         break;
3125 
3126       Expr *Arg = Args[ArgIdx++];
3127       QualType ArgType = Arg->getType();
3128 
3129       unsigned TDF = 0;
3130       if (AdjustFunctionParmAndArgTypesForDeduction(*this, TemplateParams,
3131                                                     ParamType, ArgType, Arg,
3132                                                     TDF))
3133         continue;
3134 
3135       // If we have nothing to deduce, we're done.
3136       if (!hasDeducibleTemplateParameters(*this, FunctionTemplate, ParamType))
3137         continue;
3138 
3139       // If the argument is an initializer list ...
3140       if (InitListExpr *ILE = dyn_cast<InitListExpr>(Arg)) {
3141         // ... then the parameter is an undeduced context, unless the parameter
3142         // type is (reference to cv) std::initializer_list<P'>, in which case
3143         // deduction is done for each element of the initializer list, and the
3144         // result is the deduced type if it's the same for all elements.
3145         QualType X;
3146         // Removing references was already done.
3147         if (!isStdInitializerList(ParamType, &X))
3148           continue;
3149 
3150         for (unsigned i = 0, e = ILE->getNumInits(); i < e; ++i) {
3151           if (TemplateDeductionResult Result =
3152                 DeduceTemplateArgumentByListElement(*this, TemplateParams, X,
3153                                                      ILE->getInit(i),
3154                                                      Info, Deduced, TDF))
3155             return Result;
3156         }
3157         // Don't track the argument type, since an initializer list has none.
3158         continue;
3159       }
3160 
3161       // Keep track of the argument type and corresponding parameter index,
3162       // so we can check for compatibility between the deduced A and A.
3163       OriginalCallArgs.push_back(OriginalCallArg(OrigParamType, ArgIdx-1,
3164                                                  ArgType));
3165 
3166       if (TemplateDeductionResult Result
3167             = DeduceTemplateArgumentsByTypeMatch(*this, TemplateParams,
3168                                                  ParamType, ArgType,
3169                                                  Info, Deduced, TDF))
3170         return Result;
3171 
3172       continue;
3173     }
3174 
3175     // C++0x [temp.deduct.call]p1:
3176     //   For a function parameter pack that occurs at the end of the
3177     //   parameter-declaration-list, the type A of each remaining argument of
3178     //   the call is compared with the type P of the declarator-id of the
3179     //   function parameter pack. Each comparison deduces template arguments
3180     //   for subsequent positions in the template parameter packs expanded by
3181     //   the function parameter pack. For a function parameter pack that does
3182     //   not occur at the end of the parameter-declaration-list, the type of
3183     //   the parameter pack is a non-deduced context.
3184     if (ParamIdx + 1 < NumParams)
3185       break;
3186 
3187     QualType ParamPattern = ParamExpansion->getPattern();
3188     SmallVector<unsigned, 2> PackIndices;
3189     {
3190       llvm::SmallBitVector SawIndices(TemplateParams->size());
3191       SmallVector<UnexpandedParameterPack, 2> Unexpanded;
3192       collectUnexpandedParameterPacks(ParamPattern, Unexpanded);
3193       for (unsigned I = 0, N = Unexpanded.size(); I != N; ++I) {
3194         unsigned Depth, Index;
3195         llvm::tie(Depth, Index) = getDepthAndIndex(Unexpanded[I]);
3196         if (Depth == 0 && !SawIndices[Index]) {
3197           SawIndices[Index] = true;
3198           PackIndices.push_back(Index);
3199         }
3200       }
3201     }
3202     assert(!PackIndices.empty() && "Pack expansion without unexpanded packs?");
3203 
3204     // Keep track of the deduced template arguments for each parameter pack
3205     // expanded by this pack expansion (the outer index) and for each
3206     // template argument (the inner SmallVectors).
3207     SmallVector<SmallVector<DeducedTemplateArgument, 4>, 2>
3208       NewlyDeducedPacks(PackIndices.size());
3209     SmallVector<DeducedTemplateArgument, 2>
3210       SavedPacks(PackIndices.size());
3211     PrepareArgumentPackDeduction(*this, Deduced, PackIndices, SavedPacks,
3212                                  NewlyDeducedPacks);
3213     bool HasAnyArguments = false;
3214     for (; ArgIdx < Args.size(); ++ArgIdx) {
3215       HasAnyArguments = true;
3216 
3217       QualType OrigParamType = ParamPattern;
3218       ParamType = OrigParamType;
3219       Expr *Arg = Args[ArgIdx];
3220       QualType ArgType = Arg->getType();
3221 
3222       unsigned TDF = 0;
3223       if (AdjustFunctionParmAndArgTypesForDeduction(*this, TemplateParams,
3224                                                     ParamType, ArgType, Arg,
3225                                                     TDF)) {
3226         // We can't actually perform any deduction for this argument, so stop
3227         // deduction at this point.
3228         ++ArgIdx;
3229         break;
3230       }
3231 
3232       // As above, initializer lists need special handling.
3233       if (InitListExpr *ILE = dyn_cast<InitListExpr>(Arg)) {
3234         QualType X;
3235         if (!isStdInitializerList(ParamType, &X)) {
3236           ++ArgIdx;
3237           break;
3238         }
3239 
3240         for (unsigned i = 0, e = ILE->getNumInits(); i < e; ++i) {
3241           if (TemplateDeductionResult Result =
3242                 DeduceTemplateArgumentsByTypeMatch(*this, TemplateParams, X,
3243                                                    ILE->getInit(i)->getType(),
3244                                                    Info, Deduced, TDF))
3245             return Result;
3246         }
3247       } else {
3248 
3249         // Keep track of the argument type and corresponding argument index,
3250         // so we can check for compatibility between the deduced A and A.
3251         if (hasDeducibleTemplateParameters(*this, FunctionTemplate, ParamType))
3252           OriginalCallArgs.push_back(OriginalCallArg(OrigParamType, ArgIdx,
3253                                                      ArgType));
3254 
3255         if (TemplateDeductionResult Result
3256             = DeduceTemplateArgumentsByTypeMatch(*this, TemplateParams,
3257                                                  ParamType, ArgType, Info,
3258                                                  Deduced, TDF))
3259           return Result;
3260       }
3261 
3262       // Capture the deduced template arguments for each parameter pack expanded
3263       // by this pack expansion, add them to the list of arguments we've deduced
3264       // for that pack, then clear out the deduced argument.
3265       for (unsigned I = 0, N = PackIndices.size(); I != N; ++I) {
3266         DeducedTemplateArgument &DeducedArg = Deduced[PackIndices[I]];
3267         if (!DeducedArg.isNull()) {
3268           NewlyDeducedPacks[I].push_back(DeducedArg);
3269           DeducedArg = DeducedTemplateArgument();
3270         }
3271       }
3272     }
3273 
3274     // Build argument packs for each of the parameter packs expanded by this
3275     // pack expansion.
3276     if (Sema::TemplateDeductionResult Result
3277           = FinishArgumentPackDeduction(*this, TemplateParams, HasAnyArguments,
3278                                         Deduced, PackIndices, SavedPacks,
3279                                         NewlyDeducedPacks, Info))
3280       return Result;
3281 
3282     // After we've matching against a parameter pack, we're done.
3283     break;
3284   }
3285 
3286   return FinishTemplateArgumentDeduction(FunctionTemplate, Deduced,
3287                                          NumExplicitlySpecified,
3288                                          Specialization, Info, &OriginalCallArgs);
3289 }
3290 
3291 /// \brief Deduce template arguments when taking the address of a function
3292 /// template (C++ [temp.deduct.funcaddr]) or matching a specialization to
3293 /// a template.
3294 ///
3295 /// \param FunctionTemplate the function template for which we are performing
3296 /// template argument deduction.
3297 ///
3298 /// \param ExplicitTemplateArgs the explicitly-specified template
3299 /// arguments.
3300 ///
3301 /// \param ArgFunctionType the function type that will be used as the
3302 /// "argument" type (A) when performing template argument deduction from the
3303 /// function template's function type. This type may be NULL, if there is no
3304 /// argument type to compare against, in C++0x [temp.arg.explicit]p3.
3305 ///
3306 /// \param Specialization if template argument deduction was successful,
3307 /// this will be set to the function template specialization produced by
3308 /// template argument deduction.
3309 ///
3310 /// \param Info the argument will be updated to provide additional information
3311 /// about template argument deduction.
3312 ///
3313 /// \returns the result of template argument deduction.
3314 Sema::TemplateDeductionResult
3315 Sema::DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
3316                               TemplateArgumentListInfo *ExplicitTemplateArgs,
3317                               QualType ArgFunctionType,
3318                               FunctionDecl *&Specialization,
3319                               TemplateDeductionInfo &Info) {
3320   if (FunctionTemplate->isInvalidDecl())
3321     return TDK_Invalid;
3322 
3323   FunctionDecl *Function = FunctionTemplate->getTemplatedDecl();
3324   TemplateParameterList *TemplateParams
3325     = FunctionTemplate->getTemplateParameters();
3326   QualType FunctionType = Function->getType();
3327 
3328   // Substitute any explicit template arguments.
3329   LocalInstantiationScope InstScope(*this);
3330   SmallVector<DeducedTemplateArgument, 4> Deduced;
3331   unsigned NumExplicitlySpecified = 0;
3332   SmallVector<QualType, 4> ParamTypes;
3333   if (ExplicitTemplateArgs) {
3334     if (TemplateDeductionResult Result
3335           = SubstituteExplicitTemplateArguments(FunctionTemplate,
3336                                                 *ExplicitTemplateArgs,
3337                                                 Deduced, ParamTypes,
3338                                                 &FunctionType, Info))
3339       return Result;
3340 
3341     NumExplicitlySpecified = Deduced.size();
3342   }
3343 
3344   // Unevaluated SFINAE context.
3345   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
3346   SFINAETrap Trap(*this);
3347 
3348   Deduced.resize(TemplateParams->size());
3349 
3350   if (!ArgFunctionType.isNull()) {
3351     // Deduce template arguments from the function type.
3352     if (TemplateDeductionResult Result
3353           = DeduceTemplateArgumentsByTypeMatch(*this, TemplateParams,
3354                                       FunctionType, ArgFunctionType, Info,
3355                                       Deduced, TDF_TopLevelParameterTypeList))
3356       return Result;
3357   }
3358 
3359   if (TemplateDeductionResult Result
3360         = FinishTemplateArgumentDeduction(FunctionTemplate, Deduced,
3361                                           NumExplicitlySpecified,
3362                                           Specialization, Info))
3363     return Result;
3364 
3365   // If the requested function type does not match the actual type of the
3366   // specialization, template argument deduction fails.
3367   if (!ArgFunctionType.isNull() &&
3368       !Context.hasSameType(ArgFunctionType, Specialization->getType()))
3369     return TDK_MiscellaneousDeductionFailure;
3370 
3371   return TDK_Success;
3372 }
3373 
3374 /// \brief Deduce template arguments for a templated conversion
3375 /// function (C++ [temp.deduct.conv]) and, if successful, produce a
3376 /// conversion function template specialization.
3377 Sema::TemplateDeductionResult
3378 Sema::DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
3379                               QualType ToType,
3380                               CXXConversionDecl *&Specialization,
3381                               TemplateDeductionInfo &Info) {
3382   if (FunctionTemplate->isInvalidDecl())
3383     return TDK_Invalid;
3384 
3385   CXXConversionDecl *Conv
3386     = cast<CXXConversionDecl>(FunctionTemplate->getTemplatedDecl());
3387   QualType FromType = Conv->getConversionType();
3388 
3389   // Canonicalize the types for deduction.
3390   QualType P = Context.getCanonicalType(FromType);
3391   QualType A = Context.getCanonicalType(ToType);
3392 
3393   // C++0x [temp.deduct.conv]p2:
3394   //   If P is a reference type, the type referred to by P is used for
3395   //   type deduction.
3396   if (const ReferenceType *PRef = P->getAs<ReferenceType>())
3397     P = PRef->getPointeeType();
3398 
3399   // C++0x [temp.deduct.conv]p4:
3400   //   [...] If A is a reference type, the type referred to by A is used
3401   //   for type deduction.
3402   if (const ReferenceType *ARef = A->getAs<ReferenceType>())
3403     A = ARef->getPointeeType().getUnqualifiedType();
3404   // C++ [temp.deduct.conv]p3:
3405   //
3406   //   If A is not a reference type:
3407   else {
3408     assert(!A->isReferenceType() && "Reference types were handled above");
3409 
3410     //   - If P is an array type, the pointer type produced by the
3411     //     array-to-pointer standard conversion (4.2) is used in place
3412     //     of P for type deduction; otherwise,
3413     if (P->isArrayType())
3414       P = Context.getArrayDecayedType(P);
3415     //   - If P is a function type, the pointer type produced by the
3416     //     function-to-pointer standard conversion (4.3) is used in
3417     //     place of P for type deduction; otherwise,
3418     else if (P->isFunctionType())
3419       P = Context.getPointerType(P);
3420     //   - If P is a cv-qualified type, the top level cv-qualifiers of
3421     //     P's type are ignored for type deduction.
3422     else
3423       P = P.getUnqualifiedType();
3424 
3425     // C++0x [temp.deduct.conv]p4:
3426     //   If A is a cv-qualified type, the top level cv-qualifiers of A's
3427     //   type are ignored for type deduction. If A is a reference type, the type
3428     //   referred to by A is used for type deduction.
3429     A = A.getUnqualifiedType();
3430   }
3431 
3432   // Unevaluated SFINAE context.
3433   EnterExpressionEvaluationContext Unevaluated(*this, Sema::Unevaluated);
3434   SFINAETrap Trap(*this);
3435 
3436   // C++ [temp.deduct.conv]p1:
3437   //   Template argument deduction is done by comparing the return
3438   //   type of the template conversion function (call it P) with the
3439   //   type that is required as the result of the conversion (call it
3440   //   A) as described in 14.8.2.4.
3441   TemplateParameterList *TemplateParams
3442     = FunctionTemplate->getTemplateParameters();
3443   SmallVector<DeducedTemplateArgument, 4> Deduced;
3444   Deduced.resize(TemplateParams->size());
3445 
3446   // C++0x [temp.deduct.conv]p4:
3447   //   In general, the deduction process attempts to find template
3448   //   argument values that will make the deduced A identical to
3449   //   A. However, there are two cases that allow a difference:
3450   unsigned TDF = 0;
3451   //     - If the original A is a reference type, A can be more
3452   //       cv-qualified than the deduced A (i.e., the type referred to
3453   //       by the reference)
3454   if (ToType->isReferenceType())
3455     TDF |= TDF_ParamWithReferenceType;
3456   //     - The deduced A can be another pointer or pointer to member
3457   //       type that can be converted to A via a qualification
3458   //       conversion.
3459   //
3460   // (C++0x [temp.deduct.conv]p6 clarifies that this only happens when
3461   // both P and A are pointers or member pointers. In this case, we
3462   // just ignore cv-qualifiers completely).
3463   if ((P->isPointerType() && A->isPointerType()) ||
3464       (P->isMemberPointerType() && A->isMemberPointerType()))
3465     TDF |= TDF_IgnoreQualifiers;
3466   if (TemplateDeductionResult Result
3467         = DeduceTemplateArgumentsByTypeMatch(*this, TemplateParams,
3468                                              P, A, Info, Deduced, TDF))
3469     return Result;
3470 
3471   // Finish template argument deduction.
3472   LocalInstantiationScope InstScope(*this);
3473   FunctionDecl *Spec = 0;
3474   TemplateDeductionResult Result
3475     = FinishTemplateArgumentDeduction(FunctionTemplate, Deduced, 0, Spec,
3476                                       Info);
3477   Specialization = cast_or_null<CXXConversionDecl>(Spec);
3478   return Result;
3479 }
3480 
3481 /// \brief Deduce template arguments for a function template when there is
3482 /// nothing to deduce against (C++0x [temp.arg.explicit]p3).
3483 ///
3484 /// \param FunctionTemplate the function template for which we are performing
3485 /// template argument deduction.
3486 ///
3487 /// \param ExplicitTemplateArgs the explicitly-specified template
3488 /// arguments.
3489 ///
3490 /// \param Specialization if template argument deduction was successful,
3491 /// this will be set to the function template specialization produced by
3492 /// template argument deduction.
3493 ///
3494 /// \param Info the argument will be updated to provide additional information
3495 /// about template argument deduction.
3496 ///
3497 /// \returns the result of template argument deduction.
3498 Sema::TemplateDeductionResult
3499 Sema::DeduceTemplateArguments(FunctionTemplateDecl *FunctionTemplate,
3500                               TemplateArgumentListInfo *ExplicitTemplateArgs,
3501                               FunctionDecl *&Specialization,
3502                               TemplateDeductionInfo &Info) {
3503   return DeduceTemplateArguments(FunctionTemplate, ExplicitTemplateArgs,
3504                                  QualType(), Specialization, Info);
3505 }
3506 
3507 namespace {
3508   /// Substitute the 'auto' type specifier within a type for a given replacement
3509   /// type.
3510   class SubstituteAutoTransform :
3511     public TreeTransform<SubstituteAutoTransform> {
3512     QualType Replacement;
3513   public:
3514     SubstituteAutoTransform(Sema &SemaRef, QualType Replacement) :
3515       TreeTransform<SubstituteAutoTransform>(SemaRef), Replacement(Replacement) {
3516     }
3517     QualType TransformAutoType(TypeLocBuilder &TLB, AutoTypeLoc TL) {
3518       // If we're building the type pattern to deduce against, don't wrap the
3519       // substituted type in an AutoType. Certain template deduction rules
3520       // apply only when a template type parameter appears directly (and not if
3521       // the parameter is found through desugaring). For instance:
3522       //   auto &&lref = lvalue;
3523       // must transform into "rvalue reference to T" not "rvalue reference to
3524       // auto type deduced as T" in order for [temp.deduct.call]p3 to apply.
3525       if (isa<TemplateTypeParmType>(Replacement)) {
3526         QualType Result = Replacement;
3527         TemplateTypeParmTypeLoc NewTL = TLB.push<TemplateTypeParmTypeLoc>(Result);
3528         NewTL.setNameLoc(TL.getNameLoc());
3529         return Result;
3530       } else {
3531         QualType Result = RebuildAutoType(Replacement);
3532         AutoTypeLoc NewTL = TLB.push<AutoTypeLoc>(Result);
3533         NewTL.setNameLoc(TL.getNameLoc());
3534         return Result;
3535       }
3536     }
3537 
3538     ExprResult TransformLambdaExpr(LambdaExpr *E) {
3539       // Lambdas never need to be transformed.
3540       return E;
3541     }
3542   };
3543 
3544   /// Determine whether the specified type (which contains an 'auto' type
3545   /// specifier) is dependent. This is not trivial, because the 'auto' specifier
3546   /// itself claims to be type-dependent.
3547   bool isDependentAutoType(QualType Ty) {
3548     while (1) {
3549       QualType Pointee = Ty->getPointeeType();
3550       if (!Pointee.isNull()) {
3551         Ty = Pointee;
3552       } else if (const MemberPointerType *MPT = Ty->getAs<MemberPointerType>()){
3553         if (MPT->getClass()->isDependentType())
3554           return true;
3555         Ty = MPT->getPointeeType();
3556       } else if (const FunctionProtoType *FPT = Ty->getAs<FunctionProtoType>()){
3557         for (FunctionProtoType::arg_type_iterator I = FPT->arg_type_begin(),
3558                                                   E = FPT->arg_type_end();
3559              I != E; ++I)
3560           if ((*I)->isDependentType())
3561             return true;
3562         Ty = FPT->getResultType();
3563       } else if (Ty->isDependentSizedArrayType()) {
3564         return true;
3565       } else if (const ArrayType *AT = Ty->getAsArrayTypeUnsafe()) {
3566         Ty = AT->getElementType();
3567       } else if (Ty->getAs<DependentSizedExtVectorType>()) {
3568         return true;
3569       } else if (const VectorType *VT = Ty->getAs<VectorType>()) {
3570         Ty = VT->getElementType();
3571       } else {
3572         break;
3573       }
3574     }
3575     assert(Ty->getAs<AutoType>() && "didn't find 'auto' in auto type");
3576     return false;
3577   }
3578 }
3579 
3580 /// \brief Deduce the type for an auto type-specifier (C++0x [dcl.spec.auto]p6)
3581 ///
3582 /// \param Type the type pattern using the auto type-specifier.
3583 ///
3584 /// \param Init the initializer for the variable whose type is to be deduced.
3585 ///
3586 /// \param Result if type deduction was successful, this will be set to the
3587 /// deduced type. This may still contain undeduced autos if the type is
3588 /// dependent. This will be set to null if deduction succeeded, but auto
3589 /// substitution failed; the appropriate diagnostic will already have been
3590 /// produced in that case.
3591 Sema::DeduceAutoResult
3592 Sema::DeduceAutoType(TypeSourceInfo *Type, Expr *&Init,
3593                      TypeSourceInfo *&Result) {
3594   if (Init->getType()->isNonOverloadPlaceholderType()) {
3595     ExprResult result = CheckPlaceholderExpr(Init);
3596     if (result.isInvalid()) return DAR_FailedAlreadyDiagnosed;
3597     Init = result.take();
3598   }
3599 
3600   if (Init->isTypeDependent() || isDependentAutoType(Type->getType())) {
3601     Result = Type;
3602     return DAR_Succeeded;
3603   }
3604 
3605   SourceLocation Loc = Init->getExprLoc();
3606 
3607   LocalInstantiationScope InstScope(*this);
3608 
3609   // Build template<class TemplParam> void Func(FuncParam);
3610   TemplateTypeParmDecl *TemplParam =
3611     TemplateTypeParmDecl::Create(Context, 0, SourceLocation(), Loc, 0, 0, 0,
3612                                  false, false);
3613   QualType TemplArg = QualType(TemplParam->getTypeForDecl(), 0);
3614   NamedDecl *TemplParamPtr = TemplParam;
3615   FixedSizeTemplateParameterList<1> TemplateParams(Loc, Loc, &TemplParamPtr,
3616                                                    Loc);
3617 
3618   TypeSourceInfo *FuncParamInfo =
3619     SubstituteAutoTransform(*this, TemplArg).TransformType(Type);
3620   assert(FuncParamInfo && "substituting template parameter for 'auto' failed");
3621   QualType FuncParam = FuncParamInfo->getType();
3622 
3623   // Deduce type of TemplParam in Func(Init)
3624   SmallVector<DeducedTemplateArgument, 1> Deduced;
3625   Deduced.resize(1);
3626   QualType InitType = Init->getType();
3627   unsigned TDF = 0;
3628 
3629   TemplateDeductionInfo Info(Loc);
3630 
3631   InitListExpr *InitList = dyn_cast<InitListExpr>(Init);
3632   if (InitList) {
3633     for (unsigned i = 0, e = InitList->getNumInits(); i < e; ++i) {
3634       if (DeduceTemplateArgumentByListElement(*this, &TemplateParams,
3635                                               TemplArg,
3636                                               InitList->getInit(i),
3637                                               Info, Deduced, TDF))
3638         return DAR_Failed;
3639     }
3640   } else {
3641     if (AdjustFunctionParmAndArgTypesForDeduction(*this, &TemplateParams,
3642                                                   FuncParam, InitType, Init,
3643                                                   TDF))
3644       return DAR_Failed;
3645 
3646     if (DeduceTemplateArgumentsByTypeMatch(*this, &TemplateParams, FuncParam,
3647                                            InitType, Info, Deduced, TDF))
3648       return DAR_Failed;
3649   }
3650 
3651   if (Deduced[0].getKind() != TemplateArgument::Type)
3652     return DAR_Failed;
3653 
3654   QualType DeducedType = Deduced[0].getAsType();
3655 
3656   if (InitList) {
3657     DeducedType = BuildStdInitializerList(DeducedType, Loc);
3658     if (DeducedType.isNull())
3659       return DAR_FailedAlreadyDiagnosed;
3660   }
3661 
3662   Result = SubstituteAutoTransform(*this, DeducedType).TransformType(Type);
3663 
3664   // Check that the deduced argument type is compatible with the original
3665   // argument type per C++ [temp.deduct.call]p4.
3666   if (!InitList && Result &&
3667       CheckOriginalCallArgDeduction(*this,
3668                                     Sema::OriginalCallArg(FuncParam,0,InitType),
3669                                     Result->getType())) {
3670     Result = 0;
3671     return DAR_Failed;
3672   }
3673 
3674   return DAR_Succeeded;
3675 }
3676 
3677 void Sema::DiagnoseAutoDeductionFailure(VarDecl *VDecl, Expr *Init) {
3678   if (isa<InitListExpr>(Init))
3679     Diag(VDecl->getLocation(),
3680          diag::err_auto_var_deduction_failure_from_init_list)
3681       << VDecl->getDeclName() << VDecl->getType() << Init->getSourceRange();
3682   else
3683     Diag(VDecl->getLocation(), diag::err_auto_var_deduction_failure)
3684       << VDecl->getDeclName() << VDecl->getType() << Init->getType()
3685       << Init->getSourceRange();
3686 }
3687 
3688 static void
3689 MarkUsedTemplateParameters(ASTContext &Ctx, QualType T,
3690                            bool OnlyDeduced,
3691                            unsigned Level,
3692                            llvm::SmallBitVector &Deduced);
3693 
3694 /// \brief If this is a non-static member function,
3695 static void AddImplicitObjectParameterType(ASTContext &Context,
3696                                                 CXXMethodDecl *Method,
3697                                  SmallVectorImpl<QualType> &ArgTypes) {
3698   // C++11 [temp.func.order]p3:
3699   //   [...] The new parameter is of type "reference to cv A," where cv are
3700   //   the cv-qualifiers of the function template (if any) and A is
3701   //   the class of which the function template is a member.
3702   //
3703   // The standard doesn't say explicitly, but we pick the appropriate kind of
3704   // reference type based on [over.match.funcs]p4.
3705   QualType ArgTy = Context.getTypeDeclType(Method->getParent());
3706   ArgTy = Context.getQualifiedType(ArgTy,
3707                         Qualifiers::fromCVRMask(Method->getTypeQualifiers()));
3708   if (Method->getRefQualifier() == RQ_RValue)
3709     ArgTy = Context.getRValueReferenceType(ArgTy);
3710   else
3711     ArgTy = Context.getLValueReferenceType(ArgTy);
3712   ArgTypes.push_back(ArgTy);
3713 }
3714 
3715 /// \brief Determine whether the function template \p FT1 is at least as
3716 /// specialized as \p FT2.
3717 static bool isAtLeastAsSpecializedAs(Sema &S,
3718                                      SourceLocation Loc,
3719                                      FunctionTemplateDecl *FT1,
3720                                      FunctionTemplateDecl *FT2,
3721                                      TemplatePartialOrderingContext TPOC,
3722                                      unsigned NumCallArguments,
3723     SmallVectorImpl<RefParamPartialOrderingComparison> *RefParamComparisons) {
3724   FunctionDecl *FD1 = FT1->getTemplatedDecl();
3725   FunctionDecl *FD2 = FT2->getTemplatedDecl();
3726   const FunctionProtoType *Proto1 = FD1->getType()->getAs<FunctionProtoType>();
3727   const FunctionProtoType *Proto2 = FD2->getType()->getAs<FunctionProtoType>();
3728 
3729   assert(Proto1 && Proto2 && "Function templates must have prototypes");
3730   TemplateParameterList *TemplateParams = FT2->getTemplateParameters();
3731   SmallVector<DeducedTemplateArgument, 4> Deduced;
3732   Deduced.resize(TemplateParams->size());
3733 
3734   // C++0x [temp.deduct.partial]p3:
3735   //   The types used to determine the ordering depend on the context in which
3736   //   the partial ordering is done:
3737   TemplateDeductionInfo Info(Loc);
3738   CXXMethodDecl *Method1 = 0;
3739   CXXMethodDecl *Method2 = 0;
3740   bool IsNonStatic2 = false;
3741   bool IsNonStatic1 = false;
3742   unsigned Skip2 = 0;
3743   switch (TPOC) {
3744   case TPOC_Call: {
3745     //   - In the context of a function call, the function parameter types are
3746     //     used.
3747     Method1 = dyn_cast<CXXMethodDecl>(FD1);
3748     Method2 = dyn_cast<CXXMethodDecl>(FD2);
3749     IsNonStatic1 = Method1 && !Method1->isStatic();
3750     IsNonStatic2 = Method2 && !Method2->isStatic();
3751 
3752     // C++11 [temp.func.order]p3:
3753     //   [...] If only one of the function templates is a non-static
3754     //   member, that function template is considered to have a new
3755     //   first parameter inserted in its function parameter list. The
3756     //   new parameter is of type "reference to cv A," where cv are
3757     //   the cv-qualifiers of the function template (if any) and A is
3758     //   the class of which the function template is a member.
3759     //
3760     // Note that we interpret this to mean "if one of the function
3761     // templates is a non-static member and the other is a non-member";
3762     // otherwise, the ordering rules for static functions against non-static
3763     // functions don't make any sense.
3764     //
3765     // C++98/03 doesn't have this provision, so instead we drop the
3766     // first argument of the free function, which seems to match
3767     // existing practice.
3768     SmallVector<QualType, 4> Args1;
3769     unsigned Skip1 = !S.getLangOpts().CPlusPlus11 && IsNonStatic2 && !Method1;
3770     if (S.getLangOpts().CPlusPlus11 && IsNonStatic1 && !Method2)
3771       AddImplicitObjectParameterType(S.Context, Method1, Args1);
3772     Args1.insert(Args1.end(),
3773                  Proto1->arg_type_begin() + Skip1, Proto1->arg_type_end());
3774 
3775     SmallVector<QualType, 4> Args2;
3776     Skip2 = !S.getLangOpts().CPlusPlus11 && IsNonStatic1 && !Method2;
3777     if (S.getLangOpts().CPlusPlus11 && IsNonStatic2 && !Method1)
3778       AddImplicitObjectParameterType(S.Context, Method2, Args2);
3779     Args2.insert(Args2.end(),
3780                  Proto2->arg_type_begin() + Skip2, Proto2->arg_type_end());
3781 
3782     // C++ [temp.func.order]p5:
3783     //   The presence of unused ellipsis and default arguments has no effect on
3784     //   the partial ordering of function templates.
3785     if (Args1.size() > NumCallArguments)
3786       Args1.resize(NumCallArguments);
3787     if (Args2.size() > NumCallArguments)
3788       Args2.resize(NumCallArguments);
3789     if (DeduceTemplateArguments(S, TemplateParams, Args2.data(), Args2.size(),
3790                                 Args1.data(), Args1.size(), Info, Deduced,
3791                                 TDF_None, /*PartialOrdering=*/true,
3792                                 RefParamComparisons))
3793         return false;
3794 
3795     break;
3796   }
3797 
3798   case TPOC_Conversion:
3799     //   - In the context of a call to a conversion operator, the return types
3800     //     of the conversion function templates are used.
3801     if (DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
3802                                            Proto2->getResultType(),
3803                                            Proto1->getResultType(),
3804                                            Info, Deduced, TDF_None,
3805                                            /*PartialOrdering=*/true,
3806                                            RefParamComparisons))
3807       return false;
3808     break;
3809 
3810   case TPOC_Other:
3811     //   - In other contexts (14.6.6.2) the function template's function type
3812     //     is used.
3813     if (DeduceTemplateArgumentsByTypeMatch(S, TemplateParams,
3814                                            FD2->getType(), FD1->getType(),
3815                                            Info, Deduced, TDF_None,
3816                                            /*PartialOrdering=*/true,
3817                                            RefParamComparisons))
3818       return false;
3819     break;
3820   }
3821 
3822   // C++0x [temp.deduct.partial]p11:
3823   //   In most cases, all template parameters must have values in order for
3824   //   deduction to succeed, but for partial ordering purposes a template
3825   //   parameter may remain without a value provided it is not used in the
3826   //   types being used for partial ordering. [ Note: a template parameter used
3827   //   in a non-deduced context is considered used. -end note]
3828   unsigned ArgIdx = 0, NumArgs = Deduced.size();
3829   for (; ArgIdx != NumArgs; ++ArgIdx)
3830     if (Deduced[ArgIdx].isNull())
3831       break;
3832 
3833   if (ArgIdx == NumArgs) {
3834     // All template arguments were deduced. FT1 is at least as specialized
3835     // as FT2.
3836     return true;
3837   }
3838 
3839   // Figure out which template parameters were used.
3840   llvm::SmallBitVector UsedParameters(TemplateParams->size());
3841   switch (TPOC) {
3842   case TPOC_Call: {
3843     unsigned NumParams = std::min(NumCallArguments,
3844                                   std::min(Proto1->getNumArgs(),
3845                                            Proto2->getNumArgs()));
3846     if (S.getLangOpts().CPlusPlus11 && IsNonStatic2 && !IsNonStatic1)
3847       ::MarkUsedTemplateParameters(S.Context, Method2->getThisType(S.Context),
3848                                    false,
3849                                    TemplateParams->getDepth(), UsedParameters);
3850     for (unsigned I = Skip2; I < NumParams; ++I)
3851       ::MarkUsedTemplateParameters(S.Context, Proto2->getArgType(I), false,
3852                                    TemplateParams->getDepth(),
3853                                    UsedParameters);
3854     break;
3855   }
3856 
3857   case TPOC_Conversion:
3858     ::MarkUsedTemplateParameters(S.Context, Proto2->getResultType(), false,
3859                                  TemplateParams->getDepth(),
3860                                  UsedParameters);
3861     break;
3862 
3863   case TPOC_Other:
3864     ::MarkUsedTemplateParameters(S.Context, FD2->getType(), false,
3865                                  TemplateParams->getDepth(),
3866                                  UsedParameters);
3867     break;
3868   }
3869 
3870   for (; ArgIdx != NumArgs; ++ArgIdx)
3871     // If this argument had no value deduced but was used in one of the types
3872     // used for partial ordering, then deduction fails.
3873     if (Deduced[ArgIdx].isNull() && UsedParameters[ArgIdx])
3874       return false;
3875 
3876   return true;
3877 }
3878 
3879 /// \brief Determine whether this a function template whose parameter-type-list
3880 /// ends with a function parameter pack.
3881 static bool isVariadicFunctionTemplate(FunctionTemplateDecl *FunTmpl) {
3882   FunctionDecl *Function = FunTmpl->getTemplatedDecl();
3883   unsigned NumParams = Function->getNumParams();
3884   if (NumParams == 0)
3885     return false;
3886 
3887   ParmVarDecl *Last = Function->getParamDecl(NumParams - 1);
3888   if (!Last->isParameterPack())
3889     return false;
3890 
3891   // Make sure that no previous parameter is a parameter pack.
3892   while (--NumParams > 0) {
3893     if (Function->getParamDecl(NumParams - 1)->isParameterPack())
3894       return false;
3895   }
3896 
3897   return true;
3898 }
3899 
3900 /// \brief Returns the more specialized function template according
3901 /// to the rules of function template partial ordering (C++ [temp.func.order]).
3902 ///
3903 /// \param FT1 the first function template
3904 ///
3905 /// \param FT2 the second function template
3906 ///
3907 /// \param TPOC the context in which we are performing partial ordering of
3908 /// function templates.
3909 ///
3910 /// \param NumCallArguments The number of arguments in a call, used only
3911 /// when \c TPOC is \c TPOC_Call.
3912 ///
3913 /// \returns the more specialized function template. If neither
3914 /// template is more specialized, returns NULL.
3915 FunctionTemplateDecl *
3916 Sema::getMoreSpecializedTemplate(FunctionTemplateDecl *FT1,
3917                                  FunctionTemplateDecl *FT2,
3918                                  SourceLocation Loc,
3919                                  TemplatePartialOrderingContext TPOC,
3920                                  unsigned NumCallArguments) {
3921   SmallVector<RefParamPartialOrderingComparison, 4> RefParamComparisons;
3922   bool Better1 = isAtLeastAsSpecializedAs(*this, Loc, FT1, FT2, TPOC,
3923                                           NumCallArguments, 0);
3924   bool Better2 = isAtLeastAsSpecializedAs(*this, Loc, FT2, FT1, TPOC,
3925                                           NumCallArguments,
3926                                           &RefParamComparisons);
3927 
3928   if (Better1 != Better2) // We have a clear winner
3929     return Better1? FT1 : FT2;
3930 
3931   if (!Better1 && !Better2) // Neither is better than the other
3932     return 0;
3933 
3934   // C++0x [temp.deduct.partial]p10:
3935   //   If for each type being considered a given template is at least as
3936   //   specialized for all types and more specialized for some set of types and
3937   //   the other template is not more specialized for any types or is not at
3938   //   least as specialized for any types, then the given template is more
3939   //   specialized than the other template. Otherwise, neither template is more
3940   //   specialized than the other.
3941   Better1 = false;
3942   Better2 = false;
3943   for (unsigned I = 0, N = RefParamComparisons.size(); I != N; ++I) {
3944     // C++0x [temp.deduct.partial]p9:
3945     //   If, for a given type, deduction succeeds in both directions (i.e., the
3946     //   types are identical after the transformations above) and both P and A
3947     //   were reference types (before being replaced with the type referred to
3948     //   above):
3949 
3950     //     -- if the type from the argument template was an lvalue reference
3951     //        and the type from the parameter template was not, the argument
3952     //        type is considered to be more specialized than the other;
3953     //        otherwise,
3954     if (!RefParamComparisons[I].ArgIsRvalueRef &&
3955         RefParamComparisons[I].ParamIsRvalueRef) {
3956       Better2 = true;
3957       if (Better1)
3958         return 0;
3959       continue;
3960     } else if (!RefParamComparisons[I].ParamIsRvalueRef &&
3961                RefParamComparisons[I].ArgIsRvalueRef) {
3962       Better1 = true;
3963       if (Better2)
3964         return 0;
3965       continue;
3966     }
3967 
3968     //     -- if the type from the argument template is more cv-qualified than
3969     //        the type from the parameter template (as described above), the
3970     //        argument type is considered to be more specialized than the
3971     //        other; otherwise,
3972     switch (RefParamComparisons[I].Qualifiers) {
3973     case NeitherMoreQualified:
3974       break;
3975 
3976     case ParamMoreQualified:
3977       Better1 = true;
3978       if (Better2)
3979         return 0;
3980       continue;
3981 
3982     case ArgMoreQualified:
3983       Better2 = true;
3984       if (Better1)
3985         return 0;
3986       continue;
3987     }
3988 
3989     //     -- neither type is more specialized than the other.
3990   }
3991 
3992   assert(!(Better1 && Better2) && "Should have broken out in the loop above");
3993   if (Better1)
3994     return FT1;
3995   else if (Better2)
3996     return FT2;
3997 
3998   // FIXME: This mimics what GCC implements, but doesn't match up with the
3999   // proposed resolution for core issue 692. This area needs to be sorted out,
4000   // but for now we attempt to maintain compatibility.
4001   bool Variadic1 = isVariadicFunctionTemplate(FT1);
4002   bool Variadic2 = isVariadicFunctionTemplate(FT2);
4003   if (Variadic1 != Variadic2)
4004     return Variadic1? FT2 : FT1;
4005 
4006   return 0;
4007 }
4008 
4009 /// \brief Determine if the two templates are equivalent.
4010 static bool isSameTemplate(TemplateDecl *T1, TemplateDecl *T2) {
4011   if (T1 == T2)
4012     return true;
4013 
4014   if (!T1 || !T2)
4015     return false;
4016 
4017   return T1->getCanonicalDecl() == T2->getCanonicalDecl();
4018 }
4019 
4020 /// \brief Retrieve the most specialized of the given function template
4021 /// specializations.
4022 ///
4023 /// \param SpecBegin the start iterator of the function template
4024 /// specializations that we will be comparing.
4025 ///
4026 /// \param SpecEnd the end iterator of the function template
4027 /// specializations, paired with \p SpecBegin.
4028 ///
4029 /// \param TPOC the partial ordering context to use to compare the function
4030 /// template specializations.
4031 ///
4032 /// \param NumCallArguments The number of arguments in a call, used only
4033 /// when \c TPOC is \c TPOC_Call.
4034 ///
4035 /// \param Loc the location where the ambiguity or no-specializations
4036 /// diagnostic should occur.
4037 ///
4038 /// \param NoneDiag partial diagnostic used to diagnose cases where there are
4039 /// no matching candidates.
4040 ///
4041 /// \param AmbigDiag partial diagnostic used to diagnose an ambiguity, if one
4042 /// occurs.
4043 ///
4044 /// \param CandidateDiag partial diagnostic used for each function template
4045 /// specialization that is a candidate in the ambiguous ordering. One parameter
4046 /// in this diagnostic should be unbound, which will correspond to the string
4047 /// describing the template arguments for the function template specialization.
4048 ///
4049 /// \returns the most specialized function template specialization, if
4050 /// found. Otherwise, returns SpecEnd.
4051 ///
4052 /// \todo FIXME: Consider passing in the "also-ran" candidates that failed
4053 /// template argument deduction.
4054 UnresolvedSetIterator
4055 Sema::getMostSpecialized(UnresolvedSetIterator SpecBegin,
4056                         UnresolvedSetIterator SpecEnd,
4057                          TemplatePartialOrderingContext TPOC,
4058                          unsigned NumCallArguments,
4059                          SourceLocation Loc,
4060                          const PartialDiagnostic &NoneDiag,
4061                          const PartialDiagnostic &AmbigDiag,
4062                          const PartialDiagnostic &CandidateDiag,
4063                          bool Complain,
4064                          QualType TargetType) {
4065   if (SpecBegin == SpecEnd) {
4066     if (Complain)
4067       Diag(Loc, NoneDiag);
4068     return SpecEnd;
4069   }
4070 
4071   if (SpecBegin + 1 == SpecEnd)
4072     return SpecBegin;
4073 
4074   // Find the function template that is better than all of the templates it
4075   // has been compared to.
4076   UnresolvedSetIterator Best = SpecBegin;
4077   FunctionTemplateDecl *BestTemplate
4078     = cast<FunctionDecl>(*Best)->getPrimaryTemplate();
4079   assert(BestTemplate && "Not a function template specialization?");
4080   for (UnresolvedSetIterator I = SpecBegin + 1; I != SpecEnd; ++I) {
4081     FunctionTemplateDecl *Challenger
4082       = cast<FunctionDecl>(*I)->getPrimaryTemplate();
4083     assert(Challenger && "Not a function template specialization?");
4084     if (isSameTemplate(getMoreSpecializedTemplate(BestTemplate, Challenger,
4085                                                   Loc, TPOC, NumCallArguments),
4086                        Challenger)) {
4087       Best = I;
4088       BestTemplate = Challenger;
4089     }
4090   }
4091 
4092   // Make sure that the "best" function template is more specialized than all
4093   // of the others.
4094   bool Ambiguous = false;
4095   for (UnresolvedSetIterator I = SpecBegin; I != SpecEnd; ++I) {
4096     FunctionTemplateDecl *Challenger
4097       = cast<FunctionDecl>(*I)->getPrimaryTemplate();
4098     if (I != Best &&
4099         !isSameTemplate(getMoreSpecializedTemplate(BestTemplate, Challenger,
4100                                                    Loc, TPOC, NumCallArguments),
4101                         BestTemplate)) {
4102       Ambiguous = true;
4103       break;
4104     }
4105   }
4106 
4107   if (!Ambiguous) {
4108     // We found an answer. Return it.
4109     return Best;
4110   }
4111 
4112   // Diagnose the ambiguity.
4113   if (Complain)
4114     Diag(Loc, AmbigDiag);
4115 
4116   if (Complain)
4117   // FIXME: Can we order the candidates in some sane way?
4118     for (UnresolvedSetIterator I = SpecBegin; I != SpecEnd; ++I) {
4119       PartialDiagnostic PD = CandidateDiag;
4120       PD << getTemplateArgumentBindingsText(
4121           cast<FunctionDecl>(*I)->getPrimaryTemplate()->getTemplateParameters(),
4122                     *cast<FunctionDecl>(*I)->getTemplateSpecializationArgs());
4123       if (!TargetType.isNull())
4124         HandleFunctionTypeMismatch(PD, cast<FunctionDecl>(*I)->getType(),
4125                                    TargetType);
4126       Diag((*I)->getLocation(), PD);
4127     }
4128 
4129   return SpecEnd;
4130 }
4131 
4132 /// \brief Returns the more specialized class template partial specialization
4133 /// according to the rules of partial ordering of class template partial
4134 /// specializations (C++ [temp.class.order]).
4135 ///
4136 /// \param PS1 the first class template partial specialization
4137 ///
4138 /// \param PS2 the second class template partial specialization
4139 ///
4140 /// \returns the more specialized class template partial specialization. If
4141 /// neither partial specialization is more specialized, returns NULL.
4142 ClassTemplatePartialSpecializationDecl *
4143 Sema::getMoreSpecializedPartialSpecialization(
4144                                   ClassTemplatePartialSpecializationDecl *PS1,
4145                                   ClassTemplatePartialSpecializationDecl *PS2,
4146                                               SourceLocation Loc) {
4147   // C++ [temp.class.order]p1:
4148   //   For two class template partial specializations, the first is at least as
4149   //   specialized as the second if, given the following rewrite to two
4150   //   function templates, the first function template is at least as
4151   //   specialized as the second according to the ordering rules for function
4152   //   templates (14.6.6.2):
4153   //     - the first function template has the same template parameters as the
4154   //       first partial specialization and has a single function parameter
4155   //       whose type is a class template specialization with the template
4156   //       arguments of the first partial specialization, and
4157   //     - the second function template has the same template parameters as the
4158   //       second partial specialization and has a single function parameter
4159   //       whose type is a class template specialization with the template
4160   //       arguments of the second partial specialization.
4161   //
4162   // Rather than synthesize function templates, we merely perform the
4163   // equivalent partial ordering by performing deduction directly on
4164   // the template arguments of the class template partial
4165   // specializations. This computation is slightly simpler than the
4166   // general problem of function template partial ordering, because
4167   // class template partial specializations are more constrained. We
4168   // know that every template parameter is deducible from the class
4169   // template partial specialization's template arguments, for
4170   // example.
4171   SmallVector<DeducedTemplateArgument, 4> Deduced;
4172   TemplateDeductionInfo Info(Loc);
4173 
4174   QualType PT1 = PS1->getInjectedSpecializationType();
4175   QualType PT2 = PS2->getInjectedSpecializationType();
4176 
4177   // Determine whether PS1 is at least as specialized as PS2
4178   Deduced.resize(PS2->getTemplateParameters()->size());
4179   bool Better1 = !DeduceTemplateArgumentsByTypeMatch(*this,
4180                                             PS2->getTemplateParameters(),
4181                                             PT2, PT1, Info, Deduced, TDF_None,
4182                                             /*PartialOrdering=*/true,
4183                                             /*RefParamComparisons=*/0);
4184   if (Better1) {
4185     SmallVector<TemplateArgument, 4> DeducedArgs(Deduced.begin(),Deduced.end());
4186     InstantiatingTemplate Inst(*this, PS2->getLocation(), PS2,
4187                                DeducedArgs, Info);
4188     Better1 = !::FinishTemplateArgumentDeduction(*this, PS2,
4189                                                  PS1->getTemplateArgs(),
4190                                                  Deduced, Info);
4191   }
4192 
4193   // Determine whether PS2 is at least as specialized as PS1
4194   Deduced.clear();
4195   Deduced.resize(PS1->getTemplateParameters()->size());
4196   bool Better2 = !DeduceTemplateArgumentsByTypeMatch(*this,
4197                                             PS1->getTemplateParameters(),
4198                                             PT1, PT2, Info, Deduced, TDF_None,
4199                                             /*PartialOrdering=*/true,
4200                                             /*RefParamComparisons=*/0);
4201   if (Better2) {
4202     SmallVector<TemplateArgument, 4> DeducedArgs(Deduced.begin(),Deduced.end());
4203     InstantiatingTemplate Inst(*this, PS1->getLocation(), PS1,
4204                                DeducedArgs, Info);
4205     Better2 = !::FinishTemplateArgumentDeduction(*this, PS1,
4206                                                  PS2->getTemplateArgs(),
4207                                                  Deduced, Info);
4208   }
4209 
4210   if (Better1 == Better2)
4211     return 0;
4212 
4213   return Better1? PS1 : PS2;
4214 }
4215 
4216 static void
4217 MarkUsedTemplateParameters(ASTContext &Ctx,
4218                            const TemplateArgument &TemplateArg,
4219                            bool OnlyDeduced,
4220                            unsigned Depth,
4221                            llvm::SmallBitVector &Used);
4222 
4223 /// \brief Mark the template parameters that are used by the given
4224 /// expression.
4225 static void
4226 MarkUsedTemplateParameters(ASTContext &Ctx,
4227                            const Expr *E,
4228                            bool OnlyDeduced,
4229                            unsigned Depth,
4230                            llvm::SmallBitVector &Used) {
4231   // We can deduce from a pack expansion.
4232   if (const PackExpansionExpr *Expansion = dyn_cast<PackExpansionExpr>(E))
4233     E = Expansion->getPattern();
4234 
4235   // Skip through any implicit casts we added while type-checking, and any
4236   // substitutions performed by template alias expansion.
4237   while (1) {
4238     if (const ImplicitCastExpr *ICE = dyn_cast<ImplicitCastExpr>(E))
4239       E = ICE->getSubExpr();
4240     else if (const SubstNonTypeTemplateParmExpr *Subst =
4241                dyn_cast<SubstNonTypeTemplateParmExpr>(E))
4242       E = Subst->getReplacement();
4243     else
4244       break;
4245   }
4246 
4247   // FIXME: if !OnlyDeduced, we have to walk the whole subexpression to
4248   // find other occurrences of template parameters.
4249   const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E);
4250   if (!DRE)
4251     return;
4252 
4253   const NonTypeTemplateParmDecl *NTTP
4254     = dyn_cast<NonTypeTemplateParmDecl>(DRE->getDecl());
4255   if (!NTTP)
4256     return;
4257 
4258   if (NTTP->getDepth() == Depth)
4259     Used[NTTP->getIndex()] = true;
4260 }
4261 
4262 /// \brief Mark the template parameters that are used by the given
4263 /// nested name specifier.
4264 static void
4265 MarkUsedTemplateParameters(ASTContext &Ctx,
4266                            NestedNameSpecifier *NNS,
4267                            bool OnlyDeduced,
4268                            unsigned Depth,
4269                            llvm::SmallBitVector &Used) {
4270   if (!NNS)
4271     return;
4272 
4273   MarkUsedTemplateParameters(Ctx, NNS->getPrefix(), OnlyDeduced, Depth,
4274                              Used);
4275   MarkUsedTemplateParameters(Ctx, QualType(NNS->getAsType(), 0),
4276                              OnlyDeduced, Depth, Used);
4277 }
4278 
4279 /// \brief Mark the template parameters that are used by the given
4280 /// template name.
4281 static void
4282 MarkUsedTemplateParameters(ASTContext &Ctx,
4283                            TemplateName Name,
4284                            bool OnlyDeduced,
4285                            unsigned Depth,
4286                            llvm::SmallBitVector &Used) {
4287   if (TemplateDecl *Template = Name.getAsTemplateDecl()) {
4288     if (TemplateTemplateParmDecl *TTP
4289           = dyn_cast<TemplateTemplateParmDecl>(Template)) {
4290       if (TTP->getDepth() == Depth)
4291         Used[TTP->getIndex()] = true;
4292     }
4293     return;
4294   }
4295 
4296   if (QualifiedTemplateName *QTN = Name.getAsQualifiedTemplateName())
4297     MarkUsedTemplateParameters(Ctx, QTN->getQualifier(), OnlyDeduced,
4298                                Depth, Used);
4299   if (DependentTemplateName *DTN = Name.getAsDependentTemplateName())
4300     MarkUsedTemplateParameters(Ctx, DTN->getQualifier(), OnlyDeduced,
4301                                Depth, Used);
4302 }
4303 
4304 /// \brief Mark the template parameters that are used by the given
4305 /// type.
4306 static void
4307 MarkUsedTemplateParameters(ASTContext &Ctx, QualType T,
4308                            bool OnlyDeduced,
4309                            unsigned Depth,
4310                            llvm::SmallBitVector &Used) {
4311   if (T.isNull())
4312     return;
4313 
4314   // Non-dependent types have nothing deducible
4315   if (!T->isDependentType())
4316     return;
4317 
4318   T = Ctx.getCanonicalType(T);
4319   switch (T->getTypeClass()) {
4320   case Type::Pointer:
4321     MarkUsedTemplateParameters(Ctx,
4322                                cast<PointerType>(T)->getPointeeType(),
4323                                OnlyDeduced,
4324                                Depth,
4325                                Used);
4326     break;
4327 
4328   case Type::BlockPointer:
4329     MarkUsedTemplateParameters(Ctx,
4330                                cast<BlockPointerType>(T)->getPointeeType(),
4331                                OnlyDeduced,
4332                                Depth,
4333                                Used);
4334     break;
4335 
4336   case Type::LValueReference:
4337   case Type::RValueReference:
4338     MarkUsedTemplateParameters(Ctx,
4339                                cast<ReferenceType>(T)->getPointeeType(),
4340                                OnlyDeduced,
4341                                Depth,
4342                                Used);
4343     break;
4344 
4345   case Type::MemberPointer: {
4346     const MemberPointerType *MemPtr = cast<MemberPointerType>(T.getTypePtr());
4347     MarkUsedTemplateParameters(Ctx, MemPtr->getPointeeType(), OnlyDeduced,
4348                                Depth, Used);
4349     MarkUsedTemplateParameters(Ctx, QualType(MemPtr->getClass(), 0),
4350                                OnlyDeduced, Depth, Used);
4351     break;
4352   }
4353 
4354   case Type::DependentSizedArray:
4355     MarkUsedTemplateParameters(Ctx,
4356                                cast<DependentSizedArrayType>(T)->getSizeExpr(),
4357                                OnlyDeduced, Depth, Used);
4358     // Fall through to check the element type
4359 
4360   case Type::ConstantArray:
4361   case Type::IncompleteArray:
4362     MarkUsedTemplateParameters(Ctx,
4363                                cast<ArrayType>(T)->getElementType(),
4364                                OnlyDeduced, Depth, Used);
4365     break;
4366 
4367   case Type::Vector:
4368   case Type::ExtVector:
4369     MarkUsedTemplateParameters(Ctx,
4370                                cast<VectorType>(T)->getElementType(),
4371                                OnlyDeduced, Depth, Used);
4372     break;
4373 
4374   case Type::DependentSizedExtVector: {
4375     const DependentSizedExtVectorType *VecType
4376       = cast<DependentSizedExtVectorType>(T);
4377     MarkUsedTemplateParameters(Ctx, VecType->getElementType(), OnlyDeduced,
4378                                Depth, Used);
4379     MarkUsedTemplateParameters(Ctx, VecType->getSizeExpr(), OnlyDeduced,
4380                                Depth, Used);
4381     break;
4382   }
4383 
4384   case Type::FunctionProto: {
4385     const FunctionProtoType *Proto = cast<FunctionProtoType>(T);
4386     MarkUsedTemplateParameters(Ctx, Proto->getResultType(), OnlyDeduced,
4387                                Depth, Used);
4388     for (unsigned I = 0, N = Proto->getNumArgs(); I != N; ++I)
4389       MarkUsedTemplateParameters(Ctx, Proto->getArgType(I), OnlyDeduced,
4390                                  Depth, Used);
4391     break;
4392   }
4393 
4394   case Type::TemplateTypeParm: {
4395     const TemplateTypeParmType *TTP = cast<TemplateTypeParmType>(T);
4396     if (TTP->getDepth() == Depth)
4397       Used[TTP->getIndex()] = true;
4398     break;
4399   }
4400 
4401   case Type::SubstTemplateTypeParmPack: {
4402     const SubstTemplateTypeParmPackType *Subst
4403       = cast<SubstTemplateTypeParmPackType>(T);
4404     MarkUsedTemplateParameters(Ctx,
4405                                QualType(Subst->getReplacedParameter(), 0),
4406                                OnlyDeduced, Depth, Used);
4407     MarkUsedTemplateParameters(Ctx, Subst->getArgumentPack(),
4408                                OnlyDeduced, Depth, Used);
4409     break;
4410   }
4411 
4412   case Type::InjectedClassName:
4413     T = cast<InjectedClassNameType>(T)->getInjectedSpecializationType();
4414     // fall through
4415 
4416   case Type::TemplateSpecialization: {
4417     const TemplateSpecializationType *Spec
4418       = cast<TemplateSpecializationType>(T);
4419     MarkUsedTemplateParameters(Ctx, Spec->getTemplateName(), OnlyDeduced,
4420                                Depth, Used);
4421 
4422     // C++0x [temp.deduct.type]p9:
4423     //   If the template argument list of P contains a pack expansion that is not
4424     //   the last template argument, the entire template argument list is a
4425     //   non-deduced context.
4426     if (OnlyDeduced &&
4427         hasPackExpansionBeforeEnd(Spec->getArgs(), Spec->getNumArgs()))
4428       break;
4429 
4430     for (unsigned I = 0, N = Spec->getNumArgs(); I != N; ++I)
4431       MarkUsedTemplateParameters(Ctx, Spec->getArg(I), OnlyDeduced, Depth,
4432                                  Used);
4433     break;
4434   }
4435 
4436   case Type::Complex:
4437     if (!OnlyDeduced)
4438       MarkUsedTemplateParameters(Ctx,
4439                                  cast<ComplexType>(T)->getElementType(),
4440                                  OnlyDeduced, Depth, Used);
4441     break;
4442 
4443   case Type::Atomic:
4444     if (!OnlyDeduced)
4445       MarkUsedTemplateParameters(Ctx,
4446                                  cast<AtomicType>(T)->getValueType(),
4447                                  OnlyDeduced, Depth, Used);
4448     break;
4449 
4450   case Type::DependentName:
4451     if (!OnlyDeduced)
4452       MarkUsedTemplateParameters(Ctx,
4453                                  cast<DependentNameType>(T)->getQualifier(),
4454                                  OnlyDeduced, Depth, Used);
4455     break;
4456 
4457   case Type::DependentTemplateSpecialization: {
4458     const DependentTemplateSpecializationType *Spec
4459       = cast<DependentTemplateSpecializationType>(T);
4460     if (!OnlyDeduced)
4461       MarkUsedTemplateParameters(Ctx, Spec->getQualifier(),
4462                                  OnlyDeduced, Depth, Used);
4463 
4464     // C++0x [temp.deduct.type]p9:
4465     //   If the template argument list of P contains a pack expansion that is not
4466     //   the last template argument, the entire template argument list is a
4467     //   non-deduced context.
4468     if (OnlyDeduced &&
4469         hasPackExpansionBeforeEnd(Spec->getArgs(), Spec->getNumArgs()))
4470       break;
4471 
4472     for (unsigned I = 0, N = Spec->getNumArgs(); I != N; ++I)
4473       MarkUsedTemplateParameters(Ctx, Spec->getArg(I), OnlyDeduced, Depth,
4474                                  Used);
4475     break;
4476   }
4477 
4478   case Type::TypeOf:
4479     if (!OnlyDeduced)
4480       MarkUsedTemplateParameters(Ctx,
4481                                  cast<TypeOfType>(T)->getUnderlyingType(),
4482                                  OnlyDeduced, Depth, Used);
4483     break;
4484 
4485   case Type::TypeOfExpr:
4486     if (!OnlyDeduced)
4487       MarkUsedTemplateParameters(Ctx,
4488                                  cast<TypeOfExprType>(T)->getUnderlyingExpr(),
4489                                  OnlyDeduced, Depth, Used);
4490     break;
4491 
4492   case Type::Decltype:
4493     if (!OnlyDeduced)
4494       MarkUsedTemplateParameters(Ctx,
4495                                  cast<DecltypeType>(T)->getUnderlyingExpr(),
4496                                  OnlyDeduced, Depth, Used);
4497     break;
4498 
4499   case Type::UnaryTransform:
4500     if (!OnlyDeduced)
4501       MarkUsedTemplateParameters(Ctx,
4502                                cast<UnaryTransformType>(T)->getUnderlyingType(),
4503                                  OnlyDeduced, Depth, Used);
4504     break;
4505 
4506   case Type::PackExpansion:
4507     MarkUsedTemplateParameters(Ctx,
4508                                cast<PackExpansionType>(T)->getPattern(),
4509                                OnlyDeduced, Depth, Used);
4510     break;
4511 
4512   case Type::Auto:
4513     MarkUsedTemplateParameters(Ctx,
4514                                cast<AutoType>(T)->getDeducedType(),
4515                                OnlyDeduced, Depth, Used);
4516 
4517   // None of these types have any template parameters in them.
4518   case Type::Builtin:
4519   case Type::VariableArray:
4520   case Type::FunctionNoProto:
4521   case Type::Record:
4522   case Type::Enum:
4523   case Type::ObjCInterface:
4524   case Type::ObjCObject:
4525   case Type::ObjCObjectPointer:
4526   case Type::UnresolvedUsing:
4527 #define TYPE(Class, Base)
4528 #define ABSTRACT_TYPE(Class, Base)
4529 #define DEPENDENT_TYPE(Class, Base)
4530 #define NON_CANONICAL_TYPE(Class, Base) case Type::Class:
4531 #include "clang/AST/TypeNodes.def"
4532     break;
4533   }
4534 }
4535 
4536 /// \brief Mark the template parameters that are used by this
4537 /// template argument.
4538 static void
4539 MarkUsedTemplateParameters(ASTContext &Ctx,
4540                            const TemplateArgument &TemplateArg,
4541                            bool OnlyDeduced,
4542                            unsigned Depth,
4543                            llvm::SmallBitVector &Used) {
4544   switch (TemplateArg.getKind()) {
4545   case TemplateArgument::Null:
4546   case TemplateArgument::Integral:
4547   case TemplateArgument::Declaration:
4548     break;
4549 
4550   case TemplateArgument::NullPtr:
4551     MarkUsedTemplateParameters(Ctx, TemplateArg.getNullPtrType(), OnlyDeduced,
4552                                Depth, Used);
4553     break;
4554 
4555   case TemplateArgument::Type:
4556     MarkUsedTemplateParameters(Ctx, TemplateArg.getAsType(), OnlyDeduced,
4557                                Depth, Used);
4558     break;
4559 
4560   case TemplateArgument::Template:
4561   case TemplateArgument::TemplateExpansion:
4562     MarkUsedTemplateParameters(Ctx,
4563                                TemplateArg.getAsTemplateOrTemplatePattern(),
4564                                OnlyDeduced, Depth, Used);
4565     break;
4566 
4567   case TemplateArgument::Expression:
4568     MarkUsedTemplateParameters(Ctx, TemplateArg.getAsExpr(), OnlyDeduced,
4569                                Depth, Used);
4570     break;
4571 
4572   case TemplateArgument::Pack:
4573     for (TemplateArgument::pack_iterator P = TemplateArg.pack_begin(),
4574                                       PEnd = TemplateArg.pack_end();
4575          P != PEnd; ++P)
4576       MarkUsedTemplateParameters(Ctx, *P, OnlyDeduced, Depth, Used);
4577     break;
4578   }
4579 }
4580 
4581 /// \brief Mark which template parameters can be deduced from a given
4582 /// template argument list.
4583 ///
4584 /// \param TemplateArgs the template argument list from which template
4585 /// parameters will be deduced.
4586 ///
4587 /// \param Used a bit vector whose elements will be set to \c true
4588 /// to indicate when the corresponding template parameter will be
4589 /// deduced.
4590 void
4591 Sema::MarkUsedTemplateParameters(const TemplateArgumentList &TemplateArgs,
4592                                  bool OnlyDeduced, unsigned Depth,
4593                                  llvm::SmallBitVector &Used) {
4594   // C++0x [temp.deduct.type]p9:
4595   //   If the template argument list of P contains a pack expansion that is not
4596   //   the last template argument, the entire template argument list is a
4597   //   non-deduced context.
4598   if (OnlyDeduced &&
4599       hasPackExpansionBeforeEnd(TemplateArgs.data(), TemplateArgs.size()))
4600     return;
4601 
4602   for (unsigned I = 0, N = TemplateArgs.size(); I != N; ++I)
4603     ::MarkUsedTemplateParameters(Context, TemplateArgs[I], OnlyDeduced,
4604                                  Depth, Used);
4605 }
4606 
4607 /// \brief Marks all of the template parameters that will be deduced by a
4608 /// call to the given function template.
4609 void
4610 Sema::MarkDeducedTemplateParameters(ASTContext &Ctx,
4611                                     const FunctionTemplateDecl *FunctionTemplate,
4612                                     llvm::SmallBitVector &Deduced) {
4613   TemplateParameterList *TemplateParams
4614     = FunctionTemplate->getTemplateParameters();
4615   Deduced.clear();
4616   Deduced.resize(TemplateParams->size());
4617 
4618   FunctionDecl *Function = FunctionTemplate->getTemplatedDecl();
4619   for (unsigned I = 0, N = Function->getNumParams(); I != N; ++I)
4620     ::MarkUsedTemplateParameters(Ctx, Function->getParamDecl(I)->getType(),
4621                                  true, TemplateParams->getDepth(), Deduced);
4622 }
4623 
4624 bool hasDeducibleTemplateParameters(Sema &S,
4625                                     FunctionTemplateDecl *FunctionTemplate,
4626                                     QualType T) {
4627   if (!T->isDependentType())
4628     return false;
4629 
4630   TemplateParameterList *TemplateParams
4631     = FunctionTemplate->getTemplateParameters();
4632   llvm::SmallBitVector Deduced(TemplateParams->size());
4633   ::MarkUsedTemplateParameters(S.Context, T, true, TemplateParams->getDepth(),
4634                                Deduced);
4635 
4636   return Deduced.any();
4637 }
4638