clang
3.7.0
|
Represents a type template specialization; the template must be a class template, a type alias template, or a template template parameter. A template which cannot be resolved to one of these, e.g. because it is written with a dependent scope specifier, is instead represented as a DependentTemplateSpecializationType
.
More...
#include <Type.h>
Public Types | |
typedef const TemplateArgument * | iterator |
![]() | |
enum | TypeClass { TagFirst = Record, TagLast = Enum } |
enum | ScalarTypeKind { STK_CPointer, STK_BlockPointer, STK_ObjCObjectPointer, STK_MemberPointer, STK_Bool, STK_Integral, STK_Floating, STK_IntegralComplex, STK_FloatingComplex } |
Public Member Functions | |
bool | isCurrentInstantiation () const |
bool | isTypeAlias () const |
Determine if this template specialization type is for a type alias template that has been substituted. More... | |
QualType | getAliasedType () const |
iterator | begin () const |
iterator | end () const |
TemplateName | getTemplateName () const |
Retrieve the name of the template that we are specializing. More... | |
const TemplateArgument * | getArgs () const |
Retrieve the template arguments. More... | |
unsigned | getNumArgs () const |
Retrieve the number of template arguments. More... | |
const TemplateArgument & | getArg (unsigned Idx) const |
Retrieve a specific template argument as a type. More... | |
bool | isSugared () const |
QualType | desugar () const |
void | Profile (llvm::FoldingSetNodeID &ID, const ASTContext &Ctx) |
![]() | |
TypeClass | getTypeClass () const |
bool | isFromAST () const |
Whether this type comes from an AST file. More... | |
bool | containsUnexpandedParameterPack () const |
Whether this type is or contains an unexpanded parameter pack, used to support C++0x variadic templates. More... | |
bool | isCanonicalUnqualified () const |
QualType | getLocallyUnqualifiedSingleStepDesugaredType () const |
bool | isIncompleteType (NamedDecl **Def=nullptr) const |
Def If non-NULL, and the type refers to some kind of declaration that can be completed (such as a C struct, C++ class, or Objective-C class), will be set to the declaration. More... | |
bool | isIncompleteOrObjectType () const |
bool | isObjectType () const |
Determine whether this type is an object type. More... | |
bool | isLiteralType (const ASTContext &Ctx) const |
bool | isStandardLayoutType () const |
Test if this type is a standard-layout type. (C++0x [basic.type]p9) More... | |
bool | isBuiltinType () const |
isBuiltinType - returns true if the type is a builtin type. More... | |
bool | isSpecificBuiltinType (unsigned K) const |
isSpecificBuiltinType - Test for a particular builtin type. More... | |
bool | isPlaceholderType () const |
const BuiltinType * | getAsPlaceholderType () const |
bool | isSpecificPlaceholderType (unsigned K) const |
isSpecificPlaceholderType - Test for a specific placeholder type. More... | |
bool | isNonOverloadPlaceholderType () const |
bool | isIntegerType () const |
bool | isEnumeralType () const |
bool | isBooleanType () const |
bool | isCharType () const |
bool | isWideCharType () const |
bool | isChar16Type () const |
bool | isChar32Type () const |
bool | isAnyCharacterType () const |
Determine whether this type is any of the built-in character types. More... | |
bool | isIntegralType (ASTContext &Ctx) const |
Determine whether this type is an integral type. More... | |
bool | isIntegralOrEnumerationType () const |
Determine whether this type is an integral or enumeration type. More... | |
bool | isIntegralOrUnscopedEnumerationType () const |
Determine whether this type is an integral or unscoped enumeration type. More... | |
bool | isRealFloatingType () const |
Floating point categories. More... | |
bool | isComplexType () const |
bool | isAnyComplexType () const |
bool | isFloatingType () const |
bool | isHalfType () const |
bool | isRealType () const |
bool | isArithmeticType () const |
bool | isVoidType () const |
bool | isScalarType () const |
bool | isAggregateType () const |
Determines whether the type is a C++ aggregate type or C aggregate or union type. More... | |
bool | isFundamentalType () const |
Tests whether the type is categorized as a fundamental type. More... | |
bool | isCompoundType () const |
Tests whether the type is categorized as a compound type. More... | |
bool | isFunctionType () const |
bool | isFunctionNoProtoType () const |
bool | isFunctionProtoType () const |
bool | isPointerType () const |
bool | isAnyPointerType () const |
bool | isBlockPointerType () const |
bool | isVoidPointerType () const |
bool | isReferenceType () const |
bool | isLValueReferenceType () const |
bool | isRValueReferenceType () const |
bool | isFunctionPointerType () const |
bool | isMemberPointerType () const |
bool | isMemberFunctionPointerType () const |
bool | isMemberDataPointerType () const |
bool | isArrayType () const |
bool | isConstantArrayType () const |
bool | isIncompleteArrayType () const |
bool | isVariableArrayType () const |
bool | isDependentSizedArrayType () const |
bool | isRecordType () const |
bool | isClassType () const |
bool | isStructureType () const |
bool | isObjCBoxableRecordType () const |
bool | isInterfaceType () const |
bool | isStructureOrClassType () const |
bool | isUnionType () const |
bool | isComplexIntegerType () const |
bool | isVectorType () const |
bool | isExtVectorType () const |
bool | isObjCObjectPointerType () const |
bool | isObjCRetainableType () const |
bool | isObjCLifetimeType () const |
bool | isObjCIndirectLifetimeType () const |
bool | isObjCNSObjectType () const |
bool | isObjCIndependentClassType () const |
bool | isObjCObjectType () const |
bool | isObjCQualifiedInterfaceType () const |
bool | isObjCQualifiedIdType () const |
bool | isObjCQualifiedClassType () const |
bool | isObjCObjectOrInterfaceType () const |
bool | isObjCIdType () const |
bool | isObjCIdOrObjectKindOfType (const ASTContext &ctx, const ObjCObjectType *&bound) const |
bool | isObjCClassType () const |
bool | isObjCClassOrClassKindOfType () const |
bool | isBlockCompatibleObjCPointerType (ASTContext &ctx) const |
bool | isObjCSelType () const |
bool | isObjCBuiltinType () const |
bool | isObjCARCBridgableType () const |
Determine whether the given type T is a "bridgable" Objective-C type, which is either an Objective-C object pointer type or an. More... | |
bool | isCARCBridgableType () const |
Determine whether the given type T is a "bridgeable" C type. More... | |
bool | isTemplateTypeParmType () const |
bool | isNullPtrType () const |
bool | isAtomicType () const |
bool | isImage1dT () const |
bool | isImage1dArrayT () const |
bool | isImage1dBufferT () const |
bool | isImage2dT () const |
bool | isImage2dArrayT () const |
bool | isImage3dT () const |
bool | isImageType () const |
bool | isSamplerT () const |
bool | isEventT () const |
bool | isOpenCLSpecificType () const |
bool | isObjCARCImplicitlyUnretainedType () const |
Qualifiers::ObjCLifetime | getObjCARCImplicitLifetime () const |
Return the implicit lifetime for this type, which must not be dependent. More... | |
ScalarTypeKind | getScalarTypeKind () const |
getScalarTypeKind - Given that this is a scalar type, classify it. More... | |
bool | isDependentType () const |
bool | isInstantiationDependentType () const |
Determine whether this type is an instantiation-dependent type, meaning that the type involves a template parameter (even if the definition does not actually depend on the type substituted for that template parameter). More... | |
bool | isUndeducedType () const |
Determine whether this type is an undeduced type, meaning that it somehow involves a C++11 'auto' type which has not yet been deduced. More... | |
bool | isVariablyModifiedType () const |
Whether this type is a variably-modified type (C99 6.7.5). More... | |
bool | hasSizedVLAType () const |
Whether this type involves a variable-length array type with a definite size. More... | |
bool | hasUnnamedOrLocalType () const |
Whether this type is or contains a local or unnamed type. More... | |
bool | isOverloadableType () const |
Determines whether this is a type for which one can define an overloaded operator. More... | |
bool | isElaboratedTypeSpecifier () const |
Determine wither this type is a C++ elaborated-type-specifier. More... | |
bool | canDecayToPointerType () const |
Determines whether this type can decay to a pointer type. More... | |
bool | hasPointerRepresentation () const |
bool | hasObjCPointerRepresentation () const |
bool | hasIntegerRepresentation () const |
Determine whether this type has an integer representation of some sort, e.g., it is an integer type or a vector. More... | |
bool | hasSignedIntegerRepresentation () const |
Determine whether this type has an signed integer representation of some sort, e.g., it is an signed integer type or a vector. More... | |
bool | hasUnsignedIntegerRepresentation () const |
Determine whether this type has an unsigned integer representation of some sort, e.g., it is an unsigned integer type or a vector. More... | |
bool | hasFloatingRepresentation () const |
Determine whether this type has a floating-point representation of some sort, e.g., it is a floating-point type or a vector thereof. More... | |
const RecordType * | getAsStructureType () const |
const RecordType * | getAsUnionType () const |
NOTE: getAs*ArrayType are methods on ASTContext. More... | |
const ComplexType * | getAsComplexIntegerType () const |
const ObjCObjectType * | getAsObjCInterfaceType () const |
const ObjCObjectPointerType * | getAsObjCInterfacePointerType () const |
const ObjCObjectPointerType * | getAsObjCQualifiedIdType () const |
const ObjCObjectPointerType * | getAsObjCQualifiedClassType () const |
const ObjCObjectType * | getAsObjCQualifiedInterfaceType () const |
CXXRecordDecl * | getAsCXXRecordDecl () const |
Retrieves the CXXRecordDecl that this type refers to, either because the type is a RecordType or because it is the injected-class-name type of a class template or class template partial specialization. More... | |
TagDecl * | getAsTagDecl () const |
Retrieves the TagDecl that this type refers to, either because the type is a TagType or because it is the injected-class-name type of a class template or class template partial specialization. More... | |
const CXXRecordDecl * | getPointeeCXXRecordDecl () const |
AutoType * | getContainedAutoType () const |
Get the AutoType whose type will be deduced for a variable with an initializer of this type. This looks through declarators like pointer types, but not through decltype or typedefs. More... | |
template<typename T > | |
const T * | getAs () const |
const ArrayType * | getAsArrayTypeUnsafe () const |
template<typename T > | |
const T * | castAs () const |
const ArrayType * | castAsArrayTypeUnsafe () const |
const Type * | getBaseElementTypeUnsafe () const |
const Type * | getArrayElementTypeNoTypeQual () const |
QualType | getPointeeType () const |
const Type * | getUnqualifiedDesugaredType () const |
bool | isPromotableIntegerType () const |
More type predicates useful for type checking/promotion. More... | |
bool | isSignedIntegerType () const |
bool | isUnsignedIntegerType () const |
bool | isSignedIntegerOrEnumerationType () const |
bool | isUnsignedIntegerOrEnumerationType () const |
bool | isConstantSizeType () const |
bool | isSpecifierType () const |
Linkage | getLinkage () const |
Determine the linkage of this type. More... | |
Visibility | getVisibility () const |
Determine the visibility of this type. More... | |
bool | isVisibilityExplicit () const |
Return true if the visibility was explicitly set is the code. More... | |
LinkageInfo | getLinkageAndVisibility () const |
Determine the linkage and visibility of this type. More... | |
bool | isLinkageValid () const |
True if the computed linkage is valid. Used for consistency checking. Should always return true. More... | |
Optional< NullabilityKind > | getNullability (const ASTContext &context) const |
bool | canHaveNullability () const |
Optional< ArrayRef< QualType > > | getObjCSubstitutions (const DeclContext *dc) const |
bool | acceptsObjCTypeParams () const |
const char * | getTypeClassName () const |
QualType | getCanonicalTypeInternal () const |
CanQualType | getCanonicalTypeUnqualified () const |
void | dump () const |
template<> | |
const TypedefType * | getAs () const |
This will check for a TypedefType by removing any existing sugar until it reaches a TypedefType or a non-sugared type. More... | |
template<> | |
const TemplateSpecializationType * | getAs () const |
This will check for a TemplateSpecializationType by removing any existing sugar until it reaches a TemplateSpecializationType or a non-sugared type. More... | |
template<> | |
const AttributedType * | getAs () const |
This will check for an AttributedType by removing any existing sugar until it reaches an AttributedType or a non-sugared type. More... | |
Static Public Member Functions | |
static bool | anyDependentTemplateArguments (const TemplateArgumentLoc *Args, unsigned NumArgs, bool &InstantiationDependent) |
Determine whether any of the given template arguments are dependent. More... | |
static bool | anyDependentTemplateArguments (const TemplateArgumentListInfo &, bool &InstantiationDependent) |
static void | PrintTemplateArgumentList (raw_ostream &OS, const TemplateArgument *Args, unsigned NumArgs, const PrintingPolicy &Policy, bool SkipBrackets=false) |
Print a template argument list, including the '<' and '>' enclosing the template arguments. More... | |
static void | PrintTemplateArgumentList (raw_ostream &OS, const TemplateArgumentLoc *Args, unsigned NumArgs, const PrintingPolicy &Policy) |
static void | PrintTemplateArgumentList (raw_ostream &OS, const TemplateArgumentListInfo &, const PrintingPolicy &Policy) |
static void | Profile (llvm::FoldingSetNodeID &ID, TemplateName T, const TemplateArgument *Args, unsigned NumArgs, const ASTContext &Context) |
static bool | classof (const Type *T) |
Friends | |
class | ASTContext |
Additional Inherited Members | |
![]() | |
Type * | this_ () |
Type (TypeClass tc, QualType canon, bool Dependent, bool InstantiationDependent, bool VariablyModified, bool ContainsUnexpandedParameterPack) | |
void | setDependent (bool D=true) |
void | setInstantiationDependent (bool D=true) |
void | setVariablyModified (bool VM=true) |
void | setContainsUnexpandedParameterPack (bool PP=true) |
![]() | |
union { | |
TypeBitfields TypeBits | |
ArrayTypeBitfields ArrayTypeBits | |
AttributedTypeBitfields AttributedTypeBits | |
AutoTypeBitfields AutoTypeBits | |
BuiltinTypeBitfields BuiltinTypeBits | |
FunctionTypeBitfields FunctionTypeBits | |
ObjCObjectTypeBitfields ObjCObjectTypeBits | |
ReferenceTypeBitfields ReferenceTypeBits | |
TypeWithKeywordBitfields TypeWithKeywordBits | |
VectorTypeBitfields VectorTypeBits | |
}; | |
Represents a type template specialization; the template must be a class template, a type alias template, or a template template parameter. A template which cannot be resolved to one of these, e.g. because it is written with a dependent scope specifier, is instead represented as a DependentTemplateSpecializationType
.
A non-dependent template specialization type is always "sugar", typically for a RecordType
. For example, a class template specialization type of vector<int>
will refer to a tag type for the instantiation std::vector<int
, std::allocator<int>>
Template specializations are dependent if either the template or any of the template arguments are dependent, in which case the type may also be canonical.
Instances of this type are allocated with a trailing array of TemplateArguments, followed by a QualType representing the non-canonical aliased type when the template is a type alias template.
typedef const TemplateArgument* clang::TemplateSpecializationType::iterator |
|
static |
Determine whether any of the given template arguments are dependent.
Definition at line 2957 of file Type.cpp.
Referenced by clang::Sema::ActOnClassTemplateSpecialization(), clang::Sema::ActOnFunctionDeclarator(), clang::Sema::ActOnVarTemplateSpecialization(), anyDependentTemplateArguments(), clang::Sema::BuildTemplateIdExpr(), clang::Sema::CheckTemplateIdType(), clang::Sema::CheckVarTemplateId(), DoMarkVarDeclReferenced(), clang::Sema::FindInstantiatedDecl(), and clang::Sema::InstantiateVariableDefinition().
|
static |
Definition at line 2950 of file Type.cpp.
References anyDependentTemplateArguments(), clang::TemplateArgumentListInfo::getArgumentArray(), and clang::TemplateArgumentListInfo::size().
|
inline |
Definition at line 4060 of file Type.h.
References clang::Type::getTypeClass().
|
inline |
Definition at line 4047 of file Type.h.
References clang::Type::getCanonicalTypeInternal().
|
inline |
Definition at line 648 of file TemplateBase.h.
|
inline |
|
inline |
Retrieve a specific template argument as a type.
isArgType(Arg)
Definition at line 658 of file TemplateBase.h.
Referenced by IsStructurallyEquivalent(), and MarkUsedTemplateParameters().
|
inline |
Retrieve the template arguments.
Definition at line 4033 of file Type.h.
Referenced by DeduceTemplateArguments(), clang::Sema::getTemplateInstantiationArgs(), MarkUsedTemplateParameters(), and clang::ASTNodeImporter::VisitTemplateSpecializationType().
|
inline |
Retrieve the number of template arguments.
Definition at line 4038 of file Type.h.
Referenced by DeduceTemplateArguments(), clang::Sema::getTemplateInstantiationArgs(), IsStructurallyEquivalent(), MarkUsedTemplateParameters(), and clang::ASTNodeImporter::VisitTemplateSpecializationType().
|
inline |
Retrieve the name of the template that we are specializing.
Definition at line 4030 of file Type.h.
Referenced by DeduceTemplateArguments(), isEnableIf(), IsSmallVector(), IsStdVector(), IsStructurallyEquivalent(), MarkUsedTemplateParameters(), clang::TreeTransform< Derived >::TransformTemplateSpecializationType(), and clang::ASTNodeImporter::VisitTemplateSpecializationType().
|
inline |
True if this template specialization type matches a current instantiation in the context in which it is found.
Definition at line 3996 of file Type.h.
References clang::Type::getCanonicalTypeInternal().
|
inline |
Definition at line 4044 of file Type.h.
References clang::Type::isDependentType().
|
inline |
Determine if this template specialization type is for a type alias template that has been substituted.
Nearly every template specialization type whose template is an alias template will be substituted. However, this is not the case when the specialization contains a pack expansion but the template alias does not have a corresponding parameter pack, e.g.,
|
static |
Print a template argument list, including the '<' and '>' enclosing the template arguments.
Definition at line 1390 of file TypePrinter.cpp.
Referenced by clang::ClassTemplateSpecializationDecl::getNameForDiagnostic(), clang::FunctionDecl::getNameForDiagnostic(), clang::VarTemplateSpecializationDecl::getNameForDiagnostic(), clang::NestedNameSpecifier::print(), clang::Sema::PrintInstantiationStack(), and clang::NamedDecl::printQualifiedName().
|
static |
Definition at line 1441 of file TypePrinter.cpp.
|
static |
Definition at line 1380 of file TypePrinter.cpp.
|
inline |
Definition at line 4049 of file Type.h.
Referenced by clang::ASTContext::getCanonicalTemplateSpecializationType(), and Profile().
|
static |
Definition at line 3018 of file Type.cpp.
References clang::TemplateName::Profile(), and Profile().
|
friend |