|
clang
5.0.0
|
#include "clang/Sema/TemplateDeduction.h"#include "TreeTransform.h"#include "clang/AST/ASTContext.h"#include "clang/AST/ASTLambda.h"#include "clang/AST/DeclObjC.h"#include "clang/AST/DeclTemplate.h"#include "clang/AST/Expr.h"#include "clang/AST/ExprCXX.h"#include "clang/AST/StmtVisitor.h"#include "clang/AST/TypeOrdering.h"#include "clang/Sema/DeclSpec.h"#include "clang/Sema/Sema.h"#include "clang/Sema/Template.h"#include "llvm/ADT/SmallBitVector.h"#include <algorithm>#include "clang/AST/TypeNodes.def"Go to the source code of this file.
Classes | |
| struct | clang::DeducedPack |
| A pack that we're currently deducing. More... | |
| struct | IsPartialSpecialization< T > |
| struct | IsPartialSpecialization< ClassTemplatePartialSpecializationDecl > |
| struct | IsPartialSpecialization< VarTemplatePartialSpecializationDecl > |
Namespaces | |
| clang | |
| /file This file defines classes for searching and anlyzing source code clones. | |
Macros | |
| #define | NON_CANONICAL_TYPE(Class, Base) case Type::Class: llvm_unreachable("deducing non-canonical type: " #Class); |
| #define | TYPE(Class, Base) |
| #define | TYPE(Class, Base) |
| #define | ABSTRACT_TYPE(Class, Base) |
| #define | DEPENDENT_TYPE(Class, Base) |
| #define | NON_CANONICAL_TYPE(Class, Base) case Type::Class: |
Enumerations | |
| enum | clang::TemplateDeductionFlags { clang::TDF_None = 0, clang::TDF_ParamWithReferenceType = 0x1, clang::TDF_IgnoreQualifiers = 0x02, clang::TDF_DerivedClass = 0x04, clang::TDF_SkipNonDependent = 0x08, clang::TDF_TopLevelParameterTypeList = 0x10, clang::TDF_AllowCompatibleFunctionType = 0x20 } |
| Various flags that control template argument deduction. More... | |
Functions | |
| static bool | hasSameExtendedValue (llvm::APSInt X, llvm::APSInt Y) |
| Compare two APSInts, extending and switching the sign as necessary to compare their values regardless of underlying type. More... | |
| static Sema::TemplateDeductionResult | DeduceTemplateArguments (Sema &S, TemplateParameterList *TemplateParams, const TemplateArgument &Param, TemplateArgument Arg, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced) |
| static Sema::TemplateDeductionResult | DeduceTemplateArgumentsByTypeMatch (Sema &S, TemplateParameterList *TemplateParams, QualType ParamIn, QualType ArgIn, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced, unsigned TDF, bool PartialOrdering, bool DeducedFromArrayBound) |
| Deduce the template arguments by comparing the parameter type and the argument type (C++ [temp.deduct.type]). More... | |
| static Sema::TemplateDeductionResult | DeduceTemplateArguments (Sema &S, TemplateParameterList *TemplateParams, ArrayRef< TemplateArgument > Params, ArrayRef< TemplateArgument > Args, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced, bool NumberOfArgumentsMustMatch) |
| static void | MarkUsedTemplateParameters (ASTContext &Ctx, const TemplateArgument &TemplateArg, bool OnlyDeduced, unsigned Depth, llvm::SmallBitVector &Used) |
| Mark the template parameters that are used by this template argument. More... | |
| static void | MarkUsedTemplateParameters (ASTContext &Ctx, QualType T, bool OnlyDeduced, unsigned Depth, llvm::SmallBitVector &Used) |
| Mark the template parameters that are used by the given type. More... | |
| static NonTypeTemplateParmDecl * | getDeducedParameterFromExpr (TemplateDeductionInfo &Info, Expr *E) |
| If the given expression is of a form that permits the deduction of a non-type template parameter, return the declaration of that non-type template parameter. More... | |
| static bool | isSameDeclaration (Decl *X, Decl *Y) |
| Determine whether two declaration pointers refer to the same declaration. More... | |
| static DeducedTemplateArgument | checkDeducedTemplateArguments (ASTContext &Context, const DeducedTemplateArgument &X, const DeducedTemplateArgument &Y) |
| Verify that the given, deduced template arguments are compatible. More... | |
| static Sema::TemplateDeductionResult | DeduceNonTypeTemplateArgument (Sema &S, TemplateParameterList *TemplateParams, NonTypeTemplateParmDecl *NTTP, const DeducedTemplateArgument &NewDeduced, QualType ValueType, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced) |
| Deduce the value of the given non-type template parameter as the given deduced template argument. More... | |
| static Sema::TemplateDeductionResult | DeduceNonTypeTemplateArgument (Sema &S, TemplateParameterList *TemplateParams, NonTypeTemplateParmDecl *NTTP, const llvm::APSInt &Value, QualType ValueType, bool DeducedFromArrayBound, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced) |
| Deduce the value of the given non-type template parameter from the given integral constant. More... | |
| static Sema::TemplateDeductionResult | DeduceNullPtrTemplateArgument (Sema &S, TemplateParameterList *TemplateParams, NonTypeTemplateParmDecl *NTTP, QualType NullPtrType, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced) |
| Deduce the value of the given non-type template parameter from the given null pointer template argument type. More... | |
| static Sema::TemplateDeductionResult | DeduceNonTypeTemplateArgument (Sema &S, TemplateParameterList *TemplateParams, NonTypeTemplateParmDecl *NTTP, Expr *Value, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced) |
| Deduce the value of the given non-type template parameter from the given type- or value-dependent expression. More... | |
| static Sema::TemplateDeductionResult | DeduceNonTypeTemplateArgument (Sema &S, TemplateParameterList *TemplateParams, NonTypeTemplateParmDecl *NTTP, ValueDecl *D, QualType T, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced) |
| Deduce the value of the given non-type template parameter from the given declaration. More... | |
| static Sema::TemplateDeductionResult | DeduceTemplateArguments (Sema &S, TemplateParameterList *TemplateParams, TemplateName Param, TemplateName Arg, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced) |
| static Sema::TemplateDeductionResult | DeduceTemplateArguments (Sema &S, TemplateParameterList *TemplateParams, const TemplateSpecializationType *Param, QualType Arg, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced) |
| Deduce the template arguments by comparing the template parameter type (which is a template-id) with the template argument type. More... | |
| static bool | IsPossiblyOpaquelyQualifiedType (QualType T) |
| Determines whether the given type is an opaque type that might be more qualified when instantiated. More... | |
| static std::pair< unsigned, unsigned > | getDepthAndIndex (NamedDecl *ND) |
| Retrieve the depth and index of a template parameter. More... | |
| static std::pair< unsigned, unsigned > | getDepthAndIndex (UnexpandedParameterPack UPP) |
| Retrieve the depth and index of an unexpanded parameter pack. More... | |
| static TemplateParameter | makeTemplateParameter (Decl *D) |
| Helper function to build a TemplateParameter when we don't know its type statically. More... | |
| static Sema::TemplateDeductionResult | DeduceTemplateArguments (Sema &S, TemplateParameterList *TemplateParams, const QualType *Params, unsigned NumParams, const QualType *Args, unsigned NumArgs, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced, unsigned TDF, bool PartialOrdering=false) |
| Deduce the template arguments by comparing the list of parameter types to the list of argument types, as in the parameter-type-lists of function types (C++ [temp.deduct.type]p10). More... | |
| static bool | hasInconsistentOrSupersetQualifiersOf (QualType ParamType, QualType ArgType) |
| Determine whether the parameter has qualifiers that are either inconsistent with or a superset of the argument's qualifiers. More... | |
| static unsigned | getFirstInnerIndex (FunctionTemplateDecl *FTD) |
| Get the index of the first template parameter that was originally from the innermost template-parameter-list. More... | |
| static bool | isForwardingReference (QualType Param, unsigned FirstInnerIndex) |
| Determine whether a type denotes a forwarding reference. More... | |
| static bool | hasTemplateArgumentForDeduction (ArrayRef< TemplateArgument > &Args, unsigned &ArgIdx) |
| Determine whether there is a template argument to be used for deduction. More... | |
| static bool | hasPackExpansionBeforeEnd (ArrayRef< TemplateArgument > Args) |
| Determine whether the given set of template arguments has a pack expansion that is not the last template argument. More... | |
| static Sema::TemplateDeductionResult | DeduceTemplateArguments (Sema &S, TemplateParameterList *TemplateParams, const TemplateArgumentList &ParamList, const TemplateArgumentList &ArgList, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced) |
| static bool | isSameTemplateArg (ASTContext &Context, TemplateArgument X, const TemplateArgument &Y, bool PackExpansionMatchesPack=false) |
| Determine whether two template arguments are the same. More... | |
| static bool | ConvertDeducedTemplateArgument (Sema &S, NamedDecl *Param, DeducedTemplateArgument Arg, NamedDecl *Template, TemplateDeductionInfo &Info, bool IsDeduced, SmallVectorImpl< TemplateArgument > &Output) |
| Convert the given deduced template argument and add it to the set of fully-converted template arguments. More... | |
| template<typename TemplateDeclT > | |
| static Sema::TemplateDeductionResult | ConvertDeducedTemplateArguments (Sema &S, TemplateDeclT *Template, bool IsDeduced, SmallVectorImpl< DeducedTemplateArgument > &Deduced, TemplateDeductionInfo &Info, SmallVectorImpl< TemplateArgument > &Builder, LocalInstantiationScope *CurrentInstantiationScope=nullptr, unsigned NumAlreadyConverted=0, bool PartialOverloading=false) |
| static DeclContext * | getAsDeclContextOrEnclosing (Decl *D) |
| template<typename T > | |
| static std::enable_if < IsPartialSpecialization< T > ::value, Sema::TemplateDeductionResult > ::type | FinishTemplateArgumentDeduction (Sema &S, T *Partial, bool IsPartialOrdering, const TemplateArgumentList &TemplateArgs, SmallVectorImpl< DeducedTemplateArgument > &Deduced, TemplateDeductionInfo &Info) |
| Complete template argument deduction for a partial specialization. More... | |
| static Sema::TemplateDeductionResult | FinishTemplateArgumentDeduction (Sema &S, TemplateDecl *Template, bool PartialOrdering, const TemplateArgumentList &TemplateArgs, SmallVectorImpl< DeducedTemplateArgument > &Deduced, TemplateDeductionInfo &Info) |
| Complete template argument deduction for a class or variable template, when partial ordering against a partial specialization. More... | |
| static bool | isSimpleTemplateIdType (QualType T) |
| Determine whether the given type T is a simple-template-id type. More... | |
| static bool | CheckOriginalCallArgDeduction (Sema &S, Sema::OriginalCallArg OriginalArg, QualType DeducedA) |
| Check whether the deduced argument type for a call to a function template matches the actual argument type per C++ [temp.deduct.call]p4. More... | |
| static unsigned | getPackIndexForParam (Sema &S, FunctionTemplateDecl *FunctionTemplate, const MultiLevelTemplateArgumentList &Args, unsigned ParamIdx) |
| Find the pack index for a particular parameter index in an instantiation of a function template with specific arguments. More... | |
| static QualType | GetTypeOfFunction (Sema &S, const OverloadExpr::FindResult &R, FunctionDecl *Fn) |
| Gets the type of a function for template-argument-deducton purposes when it's considered as part of an overload set. More... | |
| static QualType | ResolveOverloadForDeduction (Sema &S, TemplateParameterList *TemplateParams, Expr *Arg, QualType ParamType, bool ParamWasReference) |
| Apply the deduction rules for overload sets. More... | |
| static bool | AdjustFunctionParmAndArgTypesForDeduction (Sema &S, TemplateParameterList *TemplateParams, unsigned FirstInnerIndex, QualType &ParamType, QualType &ArgType, Expr *Arg, unsigned &TDF) |
| Perform the adjustments to the parameter and argument types described in C++ [temp.deduct.call]. More... | |
| static bool | hasDeducibleTemplateParameters (Sema &S, FunctionTemplateDecl *FunctionTemplate, QualType T) |
| static Sema::TemplateDeductionResult | DeduceTemplateArgumentsFromCallArgument (Sema &S, TemplateParameterList *TemplateParams, unsigned FirstInnerIndex, QualType ParamType, Expr *Arg, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced, SmallVectorImpl< Sema::OriginalCallArg > &OriginalCallArgs, bool DecomposedParam, unsigned ArgIdx, unsigned TDF) |
| Perform template argument deduction per [temp.deduct.call] for a single parameter / argument pair. More... | |
| static Sema::TemplateDeductionResult | DeduceFromInitializerList (Sema &S, TemplateParameterList *TemplateParams, QualType AdjustedParamType, InitListExpr *ILE, TemplateDeductionInfo &Info, SmallVectorImpl< DeducedTemplateArgument > &Deduced, SmallVectorImpl< Sema::OriginalCallArg > &OriginalCallArgs, unsigned ArgIdx, unsigned TDF) |
| Attempt template argument deduction from an initializer list deemed to be an argument in a function call. More... | |
| static void | SubstAutoWithinFunctionReturnType (FunctionDecl *F, QualType TypeToReplaceAutoWith, Sema &S) |
| Given a function declaration (e.g. More... | |
| static Sema::TemplateDeductionResult | SpecializeCorrespondingLambdaCallOperatorAndInvoker (CXXConversionDecl *ConversionSpecialized, SmallVectorImpl< DeducedTemplateArgument > &DeducedArguments, QualType ReturnTypeOfDestFunctionPtr, TemplateDeductionInfo &TDInfo, Sema &S) |
| Given a specialized conversion operator of a generic lambda create the corresponding specializations of the call operator and the static-invoker. More... | |
| static void | AddImplicitObjectParameterType (ASTContext &Context, CXXMethodDecl *Method, SmallVectorImpl< QualType > &ArgTypes) |
| If this is a non-static member function,. More... | |
| static bool | isAtLeastAsSpecializedAs (Sema &S, SourceLocation Loc, FunctionTemplateDecl *FT1, FunctionTemplateDecl *FT2, TemplatePartialOrderingContext TPOC, unsigned NumCallArguments1) |
Determine whether the function template FT1 is at least as specialized as FT2. More... | |
| static bool | isVariadicFunctionTemplate (FunctionTemplateDecl *FunTmpl) |
| Determine whether this a function template whose parameter-type-list ends with a function parameter pack. More... | |
| static bool | isSameTemplate (TemplateDecl *T1, TemplateDecl *T2) |
| Determine if the two templates are equivalent. More... | |
| template<typename TemplateLikeDecl > | |
| static bool | isAtLeastAsSpecializedAs (Sema &S, QualType T1, QualType T2, TemplateLikeDecl *P2, TemplateDeductionInfo &Info) |
| Determine whether one partial specialization, P1, is at least as specialized than another, P2. More... | |
| static void | MarkUsedTemplateParameters (ASTContext &Ctx, const Expr *E, bool OnlyDeduced, unsigned Depth, llvm::SmallBitVector &Used) |
| Mark the template parameters that are used by the given expression. More... | |
| static void | MarkUsedTemplateParameters (ASTContext &Ctx, NestedNameSpecifier *NNS, bool OnlyDeduced, unsigned Depth, llvm::SmallBitVector &Used) |
| Mark the template parameters that are used by the given nested name specifier. More... | |
| static void | MarkUsedTemplateParameters (ASTContext &Ctx, TemplateName Name, bool OnlyDeduced, unsigned Depth, llvm::SmallBitVector &Used) |
| Mark the template parameters that are used by the given template name. More... | |
| #define ABSTRACT_TYPE | ( | Class, | |
| Base | |||
| ) |
| #define DEPENDENT_TYPE | ( | Class, | |
| Base | |||
| ) |
| #define NON_CANONICAL_TYPE | ( | Class, | |
| Base | |||
| ) | case Type::Class: llvm_unreachable("deducing non-canonical type: " #Class); |
| #define NON_CANONICAL_TYPE | ( | Class, | |
| Base | |||
| ) | case Type::Class: |
| #define TYPE | ( | Class, | |
| Base | |||
| ) |
| #define TYPE | ( | Class, | |
| Base | |||
| ) |
|
static |
If this is a non-static member function,.
Definition at line 4446 of file SemaTemplateDeduction.cpp.
References clang::Qualifiers::fromCVRMask(), clang::ASTContext::getLValueReferenceType(), clang::CXXMethodDecl::getParent(), clang::ASTContext::getQualifiedType(), clang::CXXMethodDecl::getRefQualifier(), clang::ASTContext::getRValueReferenceType(), clang::ASTContext::getTypeDeclType(), clang::CXXMethodDecl::getTypeQualifiers(), and clang::RQ_RValue.
Referenced by isAtLeastAsSpecializedAs().
|
static |
Perform the adjustments to the parameter and argument types described in C++ [temp.deduct.call].
Definition at line 3325 of file SemaTemplateDeduction.cpp.
References clang::Sema::completeExprArrayBound(), clang::Sema::Context, clang::ASTContext::getArrayDecayedType(), clang::Type::getAs(), clang::ASTContext::getLValueReferenceType(), clang::PointerType::getPointeeType(), clang::ReferenceType::getPointeeType(), clang::ASTContext::getPointerType(), clang::Expr::getType(), clang::QualType::getUnqualifiedType(), clang::QualType::hasQualifiers(), clang::Type::isArrayType(), isForwardingReference(), clang::Type::isFunctionType(), clang::Type::isIncompleteArrayType(), clang::Expr::isLValue(), clang::Type::isMemberPointerType(), clang::QualType::isNull(), clang::Type::isObjCObjectPointerType(), clang::Type::isPointerType(), isSimpleTemplateIdType(), clang::ASTContext::OverloadTy, ResolveOverloadForDeduction(), clang::TDF_DerivedClass, clang::TDF_IgnoreQualifiers, clang::TDF_ParamWithReferenceType, and clang::TDF_SkipNonDependent.
Referenced by DeduceTemplateArgumentsFromCallArgument().
|
static |
Verify that the given, deduced template arguments are compatible.
Definition at line 169 of file SemaTemplateDeduction.cpp.
References clang::TemplateArgument::CreatePackCopy(), clang::TemplateArgument::Declaration, clang::TemplateArgument::Expression, clang::TemplateArgument::getAsDecl(), clang::TemplateArgument::getAsExpr(), clang::TemplateArgument::getAsIntegral(), clang::TemplateArgument::getAsTemplate(), clang::TemplateArgument::getAsTemplateOrTemplatePattern(), clang::TemplateArgument::getAsType(), clang::TemplateArgument::getKind(), clang::TemplateArgument::getNonTypeTemplateArgumentType(), clang::TemplateArgument::getParamTypeForDecl(), hasSameExtendedValue(), clang::ASTContext::hasSameTemplateName(), clang::ASTContext::hasSameType(), clang::TemplateArgument::Integral, clang::TemplateArgument::isNull(), clang::QualType::isNull(), isSameDeclaration(), clang::TemplateArgument::Null, clang::TemplateArgument::NullPtr, clang::TemplateArgument::Pack, clang::TemplateArgument::pack_begin(), clang::TemplateArgument::pack_end(), clang::TemplateArgument::pack_size(), clang::Stmt::Profile(), clang::TemplateArgument::Template, clang::TemplateArgument::TemplateExpansion, clang::TemplateArgument::Type, clang::DeducedTemplateArgument::wasDeducedFromArrayBound(), and X.
Referenced by DeduceNonTypeTemplateArgument(), DeduceTemplateArguments(), and DeduceTemplateArgumentsByTypeMatch().
|
static |
Check whether the deduced argument type for a call to a function template matches the actual argument type per C++ [temp.deduct.call]p4.
Definition at line 2911 of file SemaTemplateDeduction.cpp.
References clang::Qualifiers::compatiblyIncludes(), clang::Sema::Context, Context, clang::Type::getAs(), clang::Sema::getLangOpts(), clang::Qualifiers::getObjCLifetime(), clang::Type::getPointeeType(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::QualType::getUnqualifiedType(), clang::Qualifiers::hasConst(), clang::ASTContext::hasSameUnqualifiedType(), clang::Type::isAnyPointerType(), clang::Sema::IsDerivedFrom(), clang::Sema::IsFunctionConversion(), clang::Type::isFunctionType(), clang::Type::isMemberPointerType(), clang::Sema::IsQualificationConversion(), clang::Type::isRecordType(), isSimpleTemplateIdType(), clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_None, clang::Qualifiers::OCL_Strong, clang::Sema::OriginalCallArg::OriginalArgType, clang::Sema::OriginalCallArg::OriginalParamType, and clang::Qualifiers::setObjCLifetime().
Referenced by clang::Sema::DeduceAutoType(), and clang::Sema::FinishTemplateArgumentDeduction().
|
static |
Convert the given deduced template argument and add it to the set of fully-converted template arguments.
Definition at line 2256 of file SemaTemplateDeduction.cpp.
References clang::Sema::CheckTemplateArgument(), clang::Sema::Context, clang::TemplateArgument::CreatePackCopy(), clang::Sema::CTAK_Deduced, clang::Sema::CTAK_DeducedFromArrayBound, clang::Sema::CTAK_Specified, clang::Sema::CurContext, clang::Sema::Diag(), clang::SourceRange::getEnd(), clang::TemplateArgument::getKind(), clang::Decl::getLocation(), clang::Decl::getSourceRange(), clang::Sema::getTrivialTemplateArgumentLoc(), clang::TemplateArgumentList::OnStack, P, clang::TemplateArgument::Pack, clang::TemplateArgument::pack_elements(), clang::DeducedTemplateArgument::setDeducedFromArrayBound(), clang::Sema::SubstDecl(), clang::Sema::SubstType(), and clang::DeducedTemplateArgument::wasDeducedFromArrayBound().
Referenced by ConvertDeducedTemplateArguments().
|
static |
Definition at line 2347 of file SemaTemplateDeduction.cpp.
References Builder, clang::Sema::CheckTemplateArgument(), clang::Sema::Context, ConvertDeducedTemplateArgument(), clang::TemplateArgumentList::CreateCopy(), clang::Sema::CTAK_Specified, clang::TemplateArgumentLoc::getArgument(), clang::TemplateArgument::getEmptyPack(), clang::SourceRange::getEnd(), clang::Decl::getLocation(), clang::TemplateParameterList::getParam(), clang::TemplateDecl::getSourceRange(), I, clang::TemplateArgument::isNull(), clang::Decl::isParameterPack(), clang::Decl::isTemplateParameterPack(), makeTemplateParameter(), clang::TemplateParameterList::size(), clang::Sema::SubstDefaultTemplateArgumentIfAvailable(), clang::Sema::TDK_Incomplete, clang::Sema::TDK_SubstitutionFailure, and clang::Sema::TDK_Success.
Referenced by FinishTemplateArgumentDeduction(), and clang::Sema::FinishTemplateArgumentDeduction().
|
static |
Attempt template argument deduction from an initializer list deemed to be an argument in a function call.
Definition at line 3428 of file SemaTemplateDeduction.cpp.
References clang::Sema::Context, DeduceNonTypeTemplateArgument(), DeduceTemplateArgumentsFromCallArgument(), E, clang::ASTContext::getAsArrayType(), getDeducedParameterFromExpr(), clang::ASTContext::getIntWidth(), clang::InitListExpr::getNumInits(), clang::ASTContext::getSizeType(), clang::InitListExpr::inits(), clang::Type::isDependentType(), clang::Sema::isStdInitializerList(), Result, and clang::Sema::TDK_Success.
Referenced by DeduceTemplateArgumentsFromCallArgument().
|
static |
Deduce the value of the given non-type template parameter as the given deduced template argument.
All non-type template parameter deduction is funneled through here.
Definition at line 329 of file SemaTemplateDeduction.cpp.
References checkDeducedTemplateArguments(), clang::Sema::Context, DeduceTemplateArgumentsByTypeMatch(), clang::TemplateParmPosition::getDepth(), clang::TemplateParmPosition::getIndex(), clang::Sema::getLangOpts(), clang::QualType::getNonReferenceType(), clang::ValueDecl::getType(), clang::NonTypeTemplateParmDecl::isExpandedParameterPack(), Result, clang::TDF_SkipNonDependent, clang::Sema::TDK_Inconsistent, clang::Sema::TDK_Success, and clang::DeducedTemplateArgument::wasDeducedFromArrayBound().
Referenced by DeduceFromInitializerList(), DeduceNonTypeTemplateArgument(), DeduceNullPtrTemplateArgument(), DeduceTemplateArguments(), and DeduceTemplateArgumentsByTypeMatch().
|
static |
Deduce the value of the given non-type template parameter from the given integral constant.
Definition at line 375 of file SemaTemplateDeduction.cpp.
References clang::Sema::Context, and DeduceNonTypeTemplateArgument().
|
static |
Deduce the value of the given non-type template parameter from the given type- or value-dependent expression.
Definition at line 408 of file SemaTemplateDeduction.cpp.
References DeduceNonTypeTemplateArgument(), and clang::Expr::getType().
|
static |
Deduce the value of the given non-type template parameter from the given declaration.
Definition at line 421 of file SemaTemplateDeduction.cpp.
References DeduceNonTypeTemplateArgument(), and clang::Decl::getCanonicalDecl().
|
static |
Deduce the value of the given non-type template parameter from the given null pointer template argument type.
Definition at line 389 of file SemaTemplateDeduction.cpp.
References clang::Sema::Context, DeduceNonTypeTemplateArgument(), clang::ActionResult< PtrTy, CompressInvalid >::get(), clang::Decl::getLocation(), clang::Expr::getType(), clang::Sema::ImpCastExprToType(), and clang::ASTContext::NullPtrTy.
Referenced by DeduceTemplateArguments().
|
static |
Definition at line 1865 of file SemaTemplateDeduction.cpp.
References clang::Sema::Context, clang::TemplateArgument::Declaration, DeduceNonTypeTemplateArgument(), DeduceNullPtrTemplateArgument(), DeduceTemplateArgumentsByTypeMatch(), clang::TemplateArgument::Expression, clang::TemplateArgument::getAsDecl(), clang::TemplateArgument::getAsExpr(), clang::TemplateArgument::getAsIntegral(), clang::TemplateArgument::getAsTemplate(), clang::TemplateArgument::getAsType(), getDeducedParameterFromExpr(), clang::TemplateArgument::getIntegralType(), clang::TemplateArgument::getKind(), clang::TemplateArgument::getNullPtrType(), clang::TemplateArgument::getPackExpansionPattern(), clang::TemplateArgument::getParamTypeForDecl(), hasSameExtendedValue(), clang::ASTContext::hasSameType(), clang::TemplateArgument::Integral, clang::TemplateArgument::isPackExpansion(), isSameDeclaration(), clang::TemplateArgument::Null, clang::TemplateArgument::NullPtr, clang::TemplateArgument::Pack, clang::Sema::TDK_NonDeducedMismatch, clang::Sema::TDK_Success, clang::TemplateArgument::Template, clang::TemplateArgument::TemplateExpansion, and clang::TemplateArgument::Type.
Referenced by clang::Sema::ActOnExplicitInstantiation(), clang::Sema::CheckFunctionTemplateSpecialization(), clang::Sema::CheckVarTemplateId(), DeduceTemplateArguments(), DeduceTemplateArgumentsByTypeMatch(), and isAtLeastAsSpecializedAs().
|
static |
|
static |
Definition at line 433 of file SemaTemplateDeduction.cpp.
References checkDeducedTemplateArguments(), clang::Sema::Context, clang::TemplateName::getAsTemplateDecl(), clang::ASTContext::getCanonicalTemplateName(), clang::ASTContext::hasSameTemplateName(), Result, clang::Sema::TDK_Inconsistent, clang::Sema::TDK_NonDeducedMismatch, and clang::Sema::TDK_Success.
|
static |
Deduce the template arguments by comparing the template parameter type (which is a template-id) with the template argument type.
| S | the Sema |
| TemplateParams | the template parameters that we are deducing |
| Param | the parameter type |
| Arg | the argument type |
| Info | information about the template argument deduction itself |
| Deduced | the deduced template arguments |
Definition at line 496 of file SemaTemplateDeduction.cpp.
References clang::TemplateArgumentList::asArray(), DeduceTemplateArguments(), clang::RecordType::getDecl(), clang::ClassTemplateSpecializationDecl::getSpecializedTemplate(), clang::ClassTemplateSpecializationDecl::getTemplateArgs(), clang::TemplateSpecializationType::getTemplateName(), clang::QualType::isCanonical(), Result, clang::Sema::TDK_NonDeducedMismatch, and clang::TemplateSpecializationType::template_arguments().
|
static |
Deduce the template arguments by comparing the list of parameter types to the list of argument types, as in the parameter-type-lists of function types (C++ [temp.deduct.type]p10).
| S | The semantic analysis object within which we are deducing |
| TemplateParams | The template parameters that we are deducing |
| Params | The list of parameter types |
| NumParams | The number of types in Params |
| Args | The list of argument types |
| NumArgs | The number of types in Args |
| Info | information about the template argument deduction itself |
| Deduced | the deduced template arguments |
| TDF | bitwise OR of the TemplateDeductionFlags bits that describe how template argument deduction is performed. |
| PartialOrdering | If true, we are performing template argument deduction for during partial ordering for a call (C++0x [temp.deduct.partial]). |
Definition at line 885 of file SemaTemplateDeduction.cpp.
References DeduceTemplateArgumentsByTypeMatch(), clang::PackExpansionType::getPattern(), Result, clang::Sema::TDK_MiscellaneousDeductionFailure, and clang::Sema::TDK_Success.
|
static |
Definition at line 2105 of file SemaTemplateDeduction.cpp.
References clang::TemplateArgumentList::asArray(), and DeduceTemplateArguments().
|
static |
Deduce the template arguments by comparing the parameter type and the argument type (C++ [temp.deduct.type]).
| S | the semantic analysis object within which we are deducing |
| TemplateParams | the template parameters that we are deducing |
| ParamIn | the parameter type |
| ArgIn | the argument type |
| Info | information about the template argument deduction itself |
| Deduced | the deduced template arguments |
| TDF | bitwise OR of the TemplateDeductionFlags bits that describe how template argument deduction is performed. |
| PartialOrdering | Whether we're performing template argument deduction in the context of partial ordering (C++0x [temp.deduct.partial]). |
Definition at line 1084 of file SemaTemplateDeduction.cpp.
References clang::Sema::adjustMemberFunctionCC(), clang::Auto, clang::CXXRecordDecl::bases(), clang::ASTContext::BoolTy, clang::FunctionProtoType::canThrow(), checkDeducedTemplateArguments(), clang::Sema::Context, clang::CT_Can, clang::CT_Cannot, clang::CT_Dependent, DeduceNonTypeTemplateArgument(), DeduceTemplateArguments(), clang::Type::getAs(), clang::ASTContext::getAsArrayType(), clang::ASTContext::getAsConstantArrayType(), clang::ASTContext::getAsDependentSizedArrayType(), clang::ASTContext::getAsIncompleteArrayType(), clang::ASTContext::getCanonicalType(), clang::MemberPointerType::getClass(), clang::Qualifiers::getCVRQualifiers(), clang::QualType::getCVRQualifiers(), clang::RecordType::getDecl(), getDeducedParameterFromExpr(), clang::TemplateParmPosition::getDepth(), clang::ArrayType::getElementType(), clang::DependentSizedExtVectorType::getElementType(), clang::VectorType::getElementType(), clang::Sema::getLangOpts(), clang::FunctionProtoType::getNoexceptExpr(), clang::VectorType::getNumElements(), clang::FunctionProtoType::getNumParams(), clang::Qualifiers::getObjCLifetime(), clang::TemplateParameterList::getParam(), clang::Type::getPointeeType(), clang::BlockPointerType::getPointeeType(), clang::ReferenceType::getPointeeType(), clang::MemberPointerType::getPointeeType(), clang::ASTContext::getQualifiedType(), clang::QualType::getQualifiers(), clang::FunctionProtoType::getRefQualifier(), clang::FunctionType::getReturnType(), clang::ConstantArrayType::getSize(), clang::DependentSizedArrayType::getSizeExpr(), clang::DependentSizedExtVectorType::getSizeExpr(), clang::ASTContext::getSizeType(), clang::Type::getTypeClass(), clang::FunctionProtoType::getTypeQuals(), clang::ASTContext::getTypeSize(), clang::ASTContext::getUnqualifiedArrayType(), clang::CanQual< T >::getUnqualifiedType(), clang::QualType::getUnqualifiedType(), clang::Qualifiers::hasAddressSpace(), hasInconsistentOrSupersetQualifiersOf(), clang::Qualifiers::hasNonTrivialObjCLifetime(), clang::Qualifiers::hasObjCGCAttr(), clang::Qualifiers::hasObjCLifetime(), clang::ASTContext::hasSameUnqualifiedType(), clang::ASTContext::IntTy, clang::Sema::isCompleteType(), clang::Type::isDependentType(), isForwardingReference(), clang::Type::isFunctionType(), clang::Type::isLValueReferenceType(), clang::TemplateArgument::isNull(), clang::Type::isObjCLifetimeType(), clang::Type::isPlaceholderType(), IsPossiblyOpaquelyQualifiedType(), clang::Sema::isSameOrCompatibleFunctionType(), clang::Qualifiers::isStrictSupersetOf(), clang::FunctionProtoType::isVariadic(), Next, clang::Qualifiers::OCL_ExplicitNone, clang::Qualifiers::OCL_Strong, clang::ASTContext::OverloadTy, clang::FunctionProtoType::param_type_begin(), clang::Qualifiers::removeAddressSpace(), clang::Qualifiers::removeCVRQualifiers(), clang::Qualifiers::removeObjCGCAttr(), clang::Qualifiers::removeObjCLifetime(), Result, clang::Qualifiers::setCVRQualifiers(), clang::Qualifiers::setObjCLifetime(), clang::TDF_AllowCompatibleFunctionType, clang::TDF_DerivedClass, clang::TDF_IgnoreQualifiers, clang::TDF_ParamWithReferenceType, clang::TDF_SkipNonDependent, clang::TDF_TopLevelParameterTypeList, clang::Sema::TDK_Inconsistent, clang::Sema::TDK_MiscellaneousDeductionFailure, clang::Sema::TDK_NonDeducedMismatch, clang::Sema::TDK_Success, clang::Sema::TDK_Underqualified, and clang::Qualifiers::withoutObjCLifetime().
Referenced by DeduceNonTypeTemplateArgument(), DeduceTemplateArguments(), clang::Sema::DeduceTemplateArguments(), DeduceTemplateArgumentsFromCallArgument(), isAtLeastAsSpecializedAs(), and ResolveOverloadForDeduction().
|
static |
Perform template argument deduction per [temp.deduct.call] for a single parameter / argument pair.
Definition at line 3489 of file SemaTemplateDeduction.cpp.
References AdjustFunctionParmAndArgTypesForDeduction(), DeduceFromInitializerList(), DeduceTemplateArgumentsByTypeMatch(), clang::Expr::getType(), and clang::Sema::TDK_Success.
Referenced by clang::Sema::DeduceAutoType(), DeduceFromInitializerList(), and clang::Sema::DeduceTemplateArguments().
|
static |
Complete template argument deduction for a partial specialization.
Definition at line 2489 of file SemaTemplateDeduction.cpp.
References Builder, clang::Sema::CheckTemplateArgumentList(), clang::Sema::Context, ConvertDeducedTemplateArguments(), clang::TemplateArgumentList::CreateCopy(), E, clang::TemplateArgumentLoc::getArgument(), getAsDeclContextOrEnclosing(), clang::TemplateParameterList::getParam(), clang::ASTTemplateArgumentListInfo::getTemplateArgs(), clang::Sema::SFINAETrap::hasErrorOccurred(), I, isSameTemplateArg(), clang::ASTTemplateArgumentListInfo::LAngleLoc, makeTemplateParameter(), clang::ASTTemplateArgumentListInfo::NumTemplateArgs, clang::ASTTemplateArgumentListInfo::RAngleLoc, Result, clang::TemplateParameterList::size(), clang::TemplateArgumentListInfo::size(), clang::Sema::Subst(), clang::Sema::TDK_NonDeducedMismatch, clang::Sema::TDK_SubstitutionFailure, clang::Sema::TDK_Success, and clang::Sema::Unevaluated.
Referenced by clang::Sema::DeduceTemplateArguments(), and isAtLeastAsSpecializedAs().
|
static |
Complete template argument deduction for a class or variable template, when partial ordering against a partial specialization.
Definition at line 2568 of file SemaTemplateDeduction.cpp.
References Builder, clang::Sema::Context, ConvertDeducedTemplateArguments(), E, getAsDeclContextOrEnclosing(), clang::TemplateParameterList::getParam(), clang::TemplateDecl::getTemplateParameters(), clang::Sema::SFINAETrap::hasErrorOccurred(), I, isSameTemplateArg(), makeTemplateParameter(), Result, clang::TemplateParameterList::size(), clang::Sema::TDK_NonDeducedMismatch, clang::Sema::TDK_SubstitutionFailure, clang::Sema::TDK_Success, and clang::Sema::Unevaluated.
|
static |
Definition at line 2467 of file SemaTemplateDeduction.cpp.
References clang::Decl::getDeclContext().
Referenced by FinishTemplateArgumentDeduction().
|
static |
If the given expression is of a form that permits the deduction of a non-type template parameter, return the declaration of that non-type template parameter.
Definition at line 132 of file SemaTemplateDeduction.cpp.
Referenced by DeduceFromInitializerList(), DeduceTemplateArguments(), and DeduceTemplateArgumentsByTypeMatch().
Retrieve the depth and index of a template parameter.
Definition at line 584 of file SemaTemplateDeduction.cpp.
References clang::TemplateParmPosition::getDepth(), and clang::TemplateParmPosition::getIndex().
Referenced by getDepthAndIndex().
|
static |
Retrieve the depth and index of an unexpanded parameter pack.
Definition at line 597 of file SemaTemplateDeduction.cpp.
References getDepthAndIndex().
|
static |
Get the index of the first template parameter that was originally from the innermost template-parameter-list.
This is 0 except when we concatenate the template parameter lists of a class template and a constructor template when forming an implicit deduction guide.
Definition at line 1037 of file SemaTemplateDeduction.cpp.
References clang::CXXDeductionGuideDecl::getDeducedTemplate(), clang::FunctionTemplateDecl::getTemplatedDecl(), clang::TemplateDecl::getTemplateParameters(), and clang::TemplateParameterList::size().
Referenced by clang::Sema::DeduceTemplateArguments().
|
static |
Find the pack index for a particular parameter index in an instantiation of a function template with specific arguments.
Definition at line 3023 of file SemaTemplateDeduction.cpp.
References clang::Sema::getNumArgumentsInExpansion(), clang::FunctionTemplateDecl::getTemplatedDecl(), and clang::FunctionDecl::parameters().
Referenced by clang::Sema::FinishTemplateArgumentDeduction().
|
static |
Gets the type of a function for template-argument-deducton purposes when it's considered as part of an overload set.
Definition at line 3195 of file SemaTemplateDeduction.cpp.
References clang::Sema::Context, clang::Sema::DeduceReturnType(), clang::OverloadExpr::FindResult::Expression, clang::Expr::getExprLoc(), clang::Sema::getLangOpts(), clang::ASTContext::getMemberPointerType(), clang::ASTContext::getPointerType(), clang::FunctionDecl::getReturnType(), clang::ValueDecl::getType(), clang::ASTContext::getTypeDeclType(), clang::OverloadExpr::FindResult::HasFormOfMemberPointer, clang::OverloadExpr::FindResult::IsAddressOfOperand, and clang::Type::isUndeducedType().
Referenced by ResolveOverloadForDeduction().
|
static |
Definition at line 5422 of file SemaTemplateDeduction.cpp.
References clang::Sema::Context, clang::TemplateParameterList::getDepth(), clang::TemplateDecl::getTemplateParameters(), clang::Type::isDependentType(), MarkUsedTemplateParameters(), and clang::TemplateParameterList::size().
Referenced by clang::Sema::DeduceTemplateArguments().
Determine whether the parameter has qualifiers that are either inconsistent with or a superset of the argument's qualifiers.
Definition at line 978 of file SemaTemplateDeduction.cpp.
References clang::Qualifiers::getAddressSpace(), clang::Qualifiers::getCVRQualifiers(), clang::Qualifiers::getObjCGCAttr(), clang::Qualifiers::getObjCLifetime(), clang::QualType::getQualifiers(), clang::Qualifiers::hasAddressSpace(), clang::Qualifiers::hasObjCGCAttr(), and clang::Qualifiers::hasObjCLifetime().
Referenced by DeduceTemplateArgumentsByTypeMatch().
|
static |
Determine whether the given set of template arguments has a pack expansion that is not the last template argument.
Definition at line 2003 of file SemaTemplateDeduction.cpp.
References clang::TemplateArgument::Pack.
Referenced by DeduceTemplateArguments(), MarkUsedTemplateParameters(), and clang::Sema::MarkUsedTemplateParameters().
|
static |
Compare two APSInts, extending and switching the sign as necessary to compare their values regardless of underlying type.
Definition at line 72 of file SemaTemplateDeduction.cpp.
Referenced by checkDeducedTemplateArguments(), DeduceTemplateArguments(), and isSameTemplateArg().
|
static |
Determine whether there is a template argument to be used for deduction.
This routine "expands" argument packs in-place, overriding its input parameters so that Args[ArgIdx] will be the available template argument.
Args[ArgIdx]), false otherwise. Definition at line 1986 of file SemaTemplateDeduction.cpp.
References clang::TemplateArgument::getKind(), clang::TemplateArgument::Pack, and clang::TemplateArgument::pack_elements().
Referenced by DeduceTemplateArguments().
|
static |
Determine whether the function template FT1 is at least as specialized as FT2.
Definition at line 4468 of file SemaTemplateDeduction.cpp.
References AddImplicitObjectParameterType(), clang::Sema::Context, DeduceTemplateArguments(), DeduceTemplateArgumentsByTypeMatch(), clang::Type::getAs(), clang::TemplateParameterList::getDepth(), clang::FunctionType::getReturnType(), clang::FunctionTemplateDecl::getTemplatedDecl(), clang::TemplateDecl::getTemplateParameters(), clang::ValueDecl::getType(), I, clang::CXXMethodDecl::isStatic(), MarkUsedTemplateParameters(), clang::FunctionProtoType::param_type_begin(), clang::FunctionProtoType::param_type_end(), clang::TemplateParameterList::size(), clang::TDF_None, clang::TPOC_Call, clang::TPOC_Conversion, and clang::TPOC_Other.
Referenced by clang::Sema::getMoreSpecializedPartialSpecialization(), clang::Sema::getMoreSpecializedTemplate(), clang::Sema::isMoreSpecializedThanPrimary(), and clang::Sema::isTemplateTemplateParameterAtLeastAsSpecializedAs().
|
static |
Determine whether one partial specialization, P1, is at least as specialized than another, P2.
| TemplateLikeDecl | The kind of P2, which must be a TemplateDecl or {Class,Var}TemplatePartialSpecializationDecl. |
| T1 | The injected-class-name of P1 (faked for a variable template). |
| T2 | The injected-class-name of P2 (faked for a variable template). |
Definition at line 4804 of file SemaTemplateDeduction.cpp.
References DeduceTemplateArgumentsByTypeMatch(), FinishTemplateArgumentDeduction(), clang::TemplateArgumentList::OnStack, and clang::TDF_None.
Determine whether a type denotes a forwarding reference.
Definition at line 1045 of file SemaTemplateDeduction.cpp.
References clang::Type::getAs(), and clang::TemplateTypeParmType::getIndex().
Referenced by AdjustFunctionParmAndArgTypesForDeduction(), and DeduceTemplateArgumentsByTypeMatch().
Determines whether the given type is an opaque type that might be more qualified when instantiated.
Definition at line 560 of file SemaTemplateDeduction.cpp.
References clang::Type::getTypeClass().
Referenced by DeduceTemplateArgumentsByTypeMatch().
Determine whether two declaration pointers refer to the same declaration.
Definition at line 155 of file SemaTemplateDeduction.cpp.
References clang::Decl::getCanonicalDecl().
Referenced by checkDeducedTemplateArguments(), DeduceTemplateArguments(), and isSameTemplateArg().
|
static |
Determine if the two templates are equivalent.
Definition at line 4686 of file SemaTemplateDeduction.cpp.
References clang::Decl::getCanonicalDecl().
Referenced by clang::Sema::getMostSpecialized().
|
static |
Determine whether two template arguments are the same.
Definition at line 2117 of file SemaTemplateDeduction.cpp.
References clang::TemplateArgument::Declaration, clang::TemplateArgument::Expression, clang::TemplateArgument::getAsDecl(), clang::TemplateArgument::getAsExpr(), clang::TemplateArgument::getAsIntegral(), clang::TemplateArgument::getAsTemplateOrTemplatePattern(), clang::TemplateArgument::getAsType(), clang::ASTContext::getCanonicalTemplateName(), clang::ASTContext::getCanonicalType(), clang::TemplateArgument::getKind(), clang::TemplateArgument::getNullPtrType(), clang::TemplateArgument::getPackExpansionPattern(), hasSameExtendedValue(), clang::ASTContext::hasSameType(), clang::TemplateArgument::Integral, clang::TemplateArgument::isPackExpansion(), isSameDeclaration(), clang::TemplateArgument::Null, clang::TemplateArgument::NullPtr, clang::TemplateArgument::Pack, clang::TemplateArgument::pack_begin(), clang::TemplateArgument::pack_end(), clang::TemplateArgument::pack_size(), clang::Stmt::Profile(), clang::TemplateArgument::Template, clang::TemplateArgument::TemplateExpansion, and clang::TemplateArgument::Type.
Referenced by FinishTemplateArgumentDeduction().
Determine whether the given type T is a simple-template-id type.
Definition at line 2693 of file SemaTemplateDeduction.cpp.
References clang::Type::getAs().
Referenced by AdjustFunctionParmAndArgTypesForDeduction(), and CheckOriginalCallArgDeduction().
|
static |
Determine whether this a function template whose parameter-type-list ends with a function parameter pack.
Definition at line 4619 of file SemaTemplateDeduction.cpp.
References clang::FunctionDecl::getNumParams(), clang::FunctionDecl::getParamDecl(), clang::FunctionTemplateDecl::getTemplatedDecl(), and clang::ParmVarDecl::isParameterPack().
Referenced by clang::Sema::getMoreSpecializedTemplate().
|
static |
Helper function to build a TemplateParameter when we don't know its type statically.
Definition at line 607 of file SemaTemplateDeduction.cpp.
Referenced by ConvertDeducedTemplateArguments(), FinishTemplateArgumentDeduction(), and clang::Sema::SubstituteExplicitTemplateArguments().
|
static |
Mark the template parameters that are used by this template argument.
Definition at line 5340 of file SemaTemplateDeduction.cpp.
References clang::TemplateArgument::Declaration, Depth, clang::TemplateArgument::Expression, clang::TemplateArgument::getAsExpr(), clang::TemplateArgument::getAsTemplateOrTemplatePattern(), clang::TemplateArgument::getAsType(), clang::TemplateArgument::getKind(), clang::TemplateArgument::getNullPtrType(), clang::TemplateArgument::Integral, clang::TemplateArgument::Null, clang::TemplateArgument::NullPtr, P, clang::TemplateArgument::Pack, clang::TemplateArgument::pack_elements(), clang::TemplateArgument::Template, clang::TemplateArgument::TemplateExpansion, clang::TemplateArgument::Type, and Used.
Referenced by hasDeducibleTemplateParameters(), isAtLeastAsSpecializedAs(), and MarkUsedTemplateParameters().
|
static |
Mark the template parameters that are used by the given type.
Definition at line 5099 of file SemaTemplateDeduction.cpp.
References clang::Auto, Depth, E, clang::TemplateSpecializationType::getArg(), clang::DependentTemplateSpecializationType::getArg(), clang::SubstTemplateTypeParmPackType::getArgumentPack(), clang::ASTContext::getCanonicalType(), clang::MemberPointerType::getClass(), clang::TemplateTypeParmType::getDepth(), clang::DependentSizedExtVectorType::getElementType(), clang::TemplateTypeParmType::getIndex(), clang::FunctionProtoType::getNoexceptExpr(), clang::TemplateSpecializationType::getNumArgs(), clang::DependentTemplateSpecializationType::getNumArgs(), clang::FunctionProtoType::getNumParams(), clang::FunctionProtoType::getParamType(), clang::MemberPointerType::getPointeeType(), clang::DependentTemplateSpecializationType::getQualifier(), clang::SubstTemplateTypeParmPackType::getReplacedParameter(), clang::FunctionType::getReturnType(), clang::DependentSizedExtVectorType::getSizeExpr(), clang::TemplateSpecializationType::getTemplateName(), clang::Type::getTypeClass(), clang::QualType::getTypePtr(), getUnderlyingType(), hasPackExpansionBeforeEnd(), I, clang::Type::isDependentType(), clang::QualType::isNull(), MarkUsedTemplateParameters(), clang::TemplateSpecializationType::template_arguments(), and Used.
|
static |
Mark the template parameters that are used by the given expression.
Definition at line 5013 of file SemaTemplateDeduction.cpp.
References Depth, E, clang::DeclRefExpr::getDecl(), clang::TemplateParmPosition::getDepth(), clang::TemplateParmPosition::getIndex(), clang::ASTContext::getLangOpts(), clang::ValueDecl::getType(), MarkUsedTemplateParameters(), and Used.
|
static |
Mark the template parameters that are used by the given nested name specifier.
Definition at line 5057 of file SemaTemplateDeduction.cpp.
References Depth, clang::NestedNameSpecifier::getAsType(), clang::NestedNameSpecifier::getPrefix(), MarkUsedTemplateParameters(), and Used.
|
static |
Mark the template parameters that are used by the given template name.
Definition at line 5074 of file SemaTemplateDeduction.cpp.
References Depth, clang::TemplateName::getAsDependentTemplateName(), clang::TemplateName::getAsQualifiedTemplateName(), clang::TemplateName::getAsTemplateDecl(), MarkUsedTemplateParameters(), and Used.
|
static |
Apply the deduction rules for overload sets.
Definition at line 3221 of file SemaTemplateDeduction.cpp.
References clang::Sema::Context, clang::OverloadExpr::copyTemplateArgumentsInto(), clang::OverloadExpr::decls_begin(), clang::OverloadExpr::decls_end(), clang::Sema::DeduceTemplateArguments(), DeduceTemplateArgumentsByTypeMatch(), E, clang::OverloadExpr::FindResult::Expression, clang::OverloadExpr::find(), clang::OverloadExpr::getNameLoc(), clang::ASTContext::getPointerType(), GetTypeOfFunction(), clang::NamedDecl::getUnderlyingDecl(), clang::OverloadExpr::hasExplicitTemplateArgs(), I, clang::OverloadExpr::FindResult::IsAddressOfOperand, clang::Type::isFunctionPointerType(), clang::Type::isFunctionType(), clang::Type::isMemberFunctionPointerType(), clang::QualType::isNull(), clang::Type::isPointerType(), clang::Sema::resolveAddressOfOnlyViableOverloadCandidate(), clang::Sema::ResolveSingleFunctionTemplateSpecialization(), Result, clang::TemplateParameterList::size(), clang::TDF_IgnoreQualifiers, and clang::TDF_ParamWithReferenceType.
Referenced by AdjustFunctionParmAndArgTypesForDeduction().
|
inlinestatic |
Given a specialized conversion operator of a generic lambda create the corresponding specializations of the call operator and the static-invoker.
If the return type of the call operator is auto, deduce its return type and check if that matches the return type of the destination function ptr.
Definition at line 3896 of file SemaTemplateDeduction.cpp.
References clang::Sema::Context, clang::Sema::DeduceReturnType(), clang::Sema::FinishTemplateArgumentDeduction(), clang::Type::getContainedAutoType(), clang::DeducedType::getDeducedType(), clang::FunctionProtoType::getExtProtoInfo(), clang::ASTContext::getFunctionType(), clang::CXXRecordDecl::getLambdaCallOperator(), clang::FunctionProtoType::getParamTypes(), clang::CXXMethodDecl::getParent(), clang::FunctionDecl::getPointOfInstantiation(), clang::FunctionDecl::getReturnType(), clang::FunctionType::getReturnType(), clang::ASTContext::hasSameType(), clang::CXXRecordDecl::isGenericLambda(), clang::Type::isUndeducedType(), Result, clang::ValueDecl::setType(), SubstAutoWithinFunctionReturnType(), clang::Sema::TDK_NonDeducedMismatch, clang::Sema::TDK_Success, and clang::FunctionProtoType::ExtProtoInfo::TypeQuals.
Referenced by clang::Sema::DeduceTemplateArguments().
|
inlinestatic |
Given a function declaration (e.g.
a generic lambda conversion function) that contains an 'auto' in its result type, substitute it with TypeToReplaceAutoWith. Be careful to pass in the type you want to replace 'auto' with and not the actual result type you want to set the function to.
Definition at line 3879 of file SemaTemplateDeduction.cpp.
References clang::ASTContext::adjustDeducedFunctionResultType(), clang::Sema::Context, clang::Type::getContainedAutoType(), clang::FunctionDecl::getReturnType(), and clang::Sema::SubstAutoType().
Referenced by SpecializeCorrespondingLambdaCallOperatorAndInvoker().
1.8.6