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