Home | History | Annotate | Download | only in Sema
      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