clang  6.0.0svn
Public Types | Public Member Functions | Static Public Member Functions | Friends | List of all members
clang::TemplateSpecializationType Class Reference

Represents a type template specialization; the template must be a class template, a type alias template, or a template template parameter. More...

#include "clang/AST/Type.h"

Inheritance diagram for clang::TemplateSpecializationType:
Inheritance graph
[legend]
Collaboration diagram for clang::TemplateSpecializationType:
Collaboration graph
[legend]

Public Types

using iterator = const TemplateArgument *
 
- Public Types inherited from clang::Type
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
 True if this template specialization type matches a current instantiation in the context in which it is found. More...
 
bool isTypeAlias () const
 Determine if this template specialization type is for a type alias template that has been substituted. More...
 
QualType getAliasedType () const
 Get the aliased type, if this is a specialization of a type alias template. More...
 
iterator begin () const
 
iterator end () const
 
TemplateName getTemplateName () const
 Retrieve the name of the template that we are specializing. More...
 
const TemplateArgumentgetArgs () const
 Retrieve the template arguments. More...
 
unsigned getNumArgs () const
 Retrieve the number of template arguments. More...
 
const TemplateArgumentgetArg (unsigned Idx) const
 Retrieve a specific template argument as a type. More...
 
ArrayRef< TemplateArgumenttemplate_arguments () const
 
bool isSugared () const
 
QualType desugar () const
 
void Profile (llvm::FoldingSetNodeID &ID, const ASTContext &Ctx)
 
- Public Member Functions inherited from clang::Type
 Type (const Type &)=delete
 
Typeoperator= (const Type &)=delete
 
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
 Determines if this type would be canonical if it had no further qualification. More...
 
QualType getLocallyUnqualifiedSingleStepDesugaredType () const
 Pull a single level of sugar off of this locally-unqualified type. More...
 
bool isIncompleteType (NamedDecl **Def=nullptr) const
 Types are partitioned into 3 broad categories (C99 6.2.5p1): object types, function types, and incomplete types. More...
 
bool isIncompleteOrObjectType () const
 Return true if this is an incomplete or object type, in other words, not a function type. More...
 
bool isObjectType () const
 Determine whether this type is an object type. More...
 
bool isLiteralType (const ASTContext &Ctx) const
 Return true if this is a literal type (C++11 [basic.types]p10) More...
 
bool isStandardLayoutType () const
 Test if this type is a standard-layout type. More...
 
bool isBuiltinType () const
 Helper methods to distinguish type categories. More...
 
bool isSpecificBuiltinType (unsigned K) const
 Test for a particular builtin type. More...
 
bool isPlaceholderType () const
 Test for a type which does not represent an actual type-system type but is instead used as a placeholder for various convenient purposes within Clang. More...
 
const BuiltinTypegetAsPlaceholderType () const
 
bool isSpecificPlaceholderType (unsigned K) const
 Test for a specific placeholder type. More...
 
bool isNonOverloadPlaceholderType () const
 Test for a placeholder type other than Overload; see BuiltinType::isNonOverloadPlaceholderType. More...
 
bool isIntegerType () const
 isIntegerType() does not include complex integers (a GCC extension). More...
 
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 (const 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
 isComplexType() does not include complex integers (a GCC extension). More...
 
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 isDependentAddressSpaceType () const
 
bool isObjCObjectPointerType () const
 
bool isObjCRetainableType () const
 
bool isObjCLifetimeType () const
 Returns true if objects of this type have lifetime semantics under ARC. More...
 
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 isObjCInertUnsafeUnretainedType () const
 Was this type written with the special inert-in-MRC __unsafe_unretained qualifier? More...
 
bool isObjCIdOrObjectKindOfType (const ASTContext &ctx, const ObjCObjectType *&bound) const
 Whether the type is Objective-C 'id' or a __kindof type of an object type, e.g., __kindof NSView * or __kindof id <NSCopying>. More...
 
bool isObjCClassType () const
 
bool isObjCClassOrClassKindOfType () const
 Whether the type is Objective-C 'Class' or a __kindof type of an Class type, e.g., __kindof Class <NSCopying>. More...
 
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 isAlignValT () const
 
bool isStdByteType () const
 
bool isAtomicType () const
 
bool isImageType () const
 
bool isSamplerT () const
 
bool isEventT () const
 
bool isClkEventT () const
 
bool isQueueT () const
 
bool isReserveIDT () const
 
bool isPipeType () const
 
bool isOpenCLSpecificType () const
 
bool isObjCARCImplicitlyUnretainedType () const
 Determines if this type, which must satisfy isObjCLifetimeType(), is implicitly __unsafe_unretained rather than implicitly __strong. More...
 
Qualifiers::ObjCLifetime getObjCARCImplicitLifetime () const
 Return the implicit lifetime for this type, which must not be dependent. More...
 
ScalarTypeKind getScalarTypeKind () const
 Given that this is a scalar type, classify it. More...
 
bool isDependentType () const
 Whether this type is a dependent type, meaning that its definition somehow depends on a template parameter (C++ [temp.dep.type]). More...
 
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 or similar 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
 Whether this type is represented natively as a pointer. More...
 
bool hasObjCPointerRepresentation () const
 Whether this type can represent an objective pointer type for the purpose of GC'ability. More...
 
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 RecordTypegetAsStructureType () const
 
const RecordTypegetAsUnionType () const
 NOTE: getAs*ArrayType are methods on ASTContext. More...
 
const ComplexTypegetAsComplexIntegerType () const
 
const ObjCObjectTypegetAsObjCInterfaceType () const
 
const ObjCObjectPointerTypegetAsObjCInterfacePointerType () const
 
const ObjCObjectPointerTypegetAsObjCQualifiedIdType () const
 
const ObjCObjectPointerTypegetAsObjCQualifiedClassType () const
 
const ObjCObjectTypegetAsObjCQualifiedInterfaceType () const
 
CXXRecordDeclgetAsCXXRecordDecl () 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...
 
TagDeclgetAsTagDecl () 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 CXXRecordDeclgetPointeeCXXRecordDecl () const
 If this is a pointer or reference to a RecordType, return the CXXRecordDecl that that type refers to. More...
 
DeducedTypegetContainedDeducedType () const
 Get the DeducedType whose type will be deduced for a variable with an initializer of this type. More...
 
AutoTypegetContainedAutoType () const
 Get the AutoType whose type will be deduced for a variable with an initializer of this type. More...
 
bool hasAutoForTrailingReturnType () const
 Determine whether this type was written with a leading 'auto' corresponding to a trailing return type (possibly for a nested function type within a pointer to function type or similar). More...
 
template<typename T >
const TgetAs () const
 Member-template getAs<specific type>'. More...
 
template<typename T >
const TgetAsAdjusted () const
 Member-template getAsAdjusted<specific type>. More...
 
const ArrayTypegetAsArrayTypeUnsafe () const
 A variant of getAs<> for array types which silently discards qualifiers from the outermost type. More...
 
template<typename T >
const TcastAs () const
 Member-template castAs<specific type>. More...
 
const ArrayTypecastAsArrayTypeUnsafe () const
 A variant of castAs<> for array type which silently discards qualifiers from the outermost type. More...
 
const TypegetBaseElementTypeUnsafe () const
 Get the base element type of this type, potentially discarding type qualifiers. More...
 
const TypegetArrayElementTypeNoTypeQual () const
 If this is an array type, return the element type of the array, potentially with type qualifiers missing. More...
 
const TypegetPointeeOrArrayElementType () const
 If this is a pointer type, return the pointee type. More...
 
QualType getPointeeType () const
 If this is a pointer, ObjC object pointer, or block pointer, this returns the respective pointee. More...
 
const TypegetUnqualifiedDesugaredType () const
 Return the specified type with any "sugar" removed from the type, removing any typedefs, typeofs, etc., as well as any qualifiers. More...
 
bool isPromotableIntegerType () const
 More type predicates useful for type checking/promotion. More...
 
bool isSignedIntegerType () const
 Return true if this is an integer type that is signed, according to C99 6.2.5p4 [char, signed char, short, int, long..], or an enum decl which has a signed representation. More...
 
bool isUnsignedIntegerType () const
 Return true if this is an integer type that is unsigned, according to C99 6.2.5p6 [which returns true for _Bool], or an enum decl which has an unsigned representation. More...
 
bool isSignedIntegerOrEnumerationType () const
 Determines whether this is an integer type that is signed or an enumeration types whose underlying type is a signed integer type. More...
 
bool isUnsignedIntegerOrEnumerationType () const
 Determines whether this is an integer type that is unsigned or an enumeration types whose underlying type is a unsigned integer type. More...
 
bool isConstantSizeType () const
 Return true if this is not a variable sized type, according to the rules of C99 6.7.5p3. More...
 
bool isSpecifierType () const
 Returns true if this type can be represented by some set of type specifiers. More...
 
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. More...
 
Optional< NullabilityKindgetNullability (const ASTContext &context) const
 Determine the nullability of the given type. More...
 
bool canHaveNullability (bool ResultIfUnknown=true) const
 Determine whether the given type can have a nullability specifier applied to it, i.e., if it is any kind of pointer type. More...
 
Optional< ArrayRef< QualType > > getObjCSubstitutions (const DeclContext *dc) const
 Retrieve the set of substitutions required when accessing a member of the Objective-C receiver type that is declared in the given context. More...
 
bool acceptsObjCTypeParams () const
 Determines if this is an ObjC interface type that may accept type parameters. More...
 
const char * getTypeClassName () const
 
QualType getCanonicalTypeInternal () const
 
CanQualType getCanonicalTypeUnqualified () const
 
void dump () const
 
void dump (llvm::raw_ostream &OS) const
 
template<>
const TypedefTypegetAs () 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 TemplateSpecializationTypegetAs () 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 AttributedTypegetAs () 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 (ArrayRef< TemplateArgumentLoc > Args, bool &InstantiationDependent)
 Determine whether any of the given template arguments are dependent. More...
 
static bool anyDependentTemplateArguments (const TemplateArgumentListInfo &, bool &InstantiationDependent)
 
static void Profile (llvm::FoldingSetNodeID &ID, TemplateName T, ArrayRef< TemplateArgument > Args, const ASTContext &Context)
 
static bool classof (const Type *T)
 

Friends

class ASTContext
 

Additional Inherited Members

- Protected Member Functions inherited from clang::Type
 Type (TypeClass tc, QualType canon, bool Dependent, bool InstantiationDependent, bool VariablyModified, bool ContainsUnexpandedParameterPack)
 
Typethis_ ()
 
void setDependent (bool D=true)
 
void setInstantiationDependent (bool D=true)
 
void setVariablyModified (bool VM=true)
 
void setContainsUnexpandedParameterPack (bool PP=true)
 
- Protected Attributes inherited from clang::Type
union {
   TypeBitfields   TypeBits
 
   ArrayTypeBitfields   ArrayTypeBits
 
   AttributedTypeBitfields   AttributedTypeBits
 
   AutoTypeBitfields   AutoTypeBits
 
   BuiltinTypeBitfields   BuiltinTypeBits
 
   FunctionTypeBitfields   FunctionTypeBits
 
   ObjCObjectTypeBitfields   ObjCObjectTypeBits
 
   ReferenceTypeBitfields   ReferenceTypeBits
 
   TypeWithKeywordBitfields   TypeWithKeywordBits
 
   VectorTypeBitfields   VectorTypeBits
 
}; 
 

Detailed Description

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.

Definition at line 4495 of file Type.h.

Member Typedef Documentation

◆ iterator

Definition at line 4559 of file Type.h.

Member Function Documentation

◆ anyDependentTemplateArguments() [1/2]

bool TemplateSpecializationType::anyDependentTemplateArguments ( ArrayRef< TemplateArgumentLoc Args,
bool InstantiationDependent 
)
static

◆ anyDependentTemplateArguments() [2/2]

bool TemplateSpecializationType::anyDependentTemplateArguments ( const TemplateArgumentListInfo Args,
bool InstantiationDependent 
)
static

◆ begin()

iterator clang::TemplateSpecializationType::begin ( ) const
inline

Definition at line 4561 of file Type.h.

◆ classof()

static bool clang::TemplateSpecializationType::classof ( const Type T)
inlinestatic

Definition at line 4599 of file Type.h.

References clang::Type::getTypeClass(), and clang::printTemplateArgumentList().

◆ desugar()

QualType clang::TemplateSpecializationType::desugar ( ) const
inline

Definition at line 4587 of file Type.h.

◆ end()

TemplateSpecializationType::iterator clang::TemplateSpecializationType::end ( ) const
inline

Definition at line 672 of file TemplateBase.h.

◆ getAliasedType()

QualType clang::TemplateSpecializationType::getAliasedType ( ) const
inline

Get the aliased type, if this is a specialization of a type alias template.

Definition at line 4554 of file Type.h.

◆ getArg()

const TemplateArgument & clang::TemplateSpecializationType::getArg ( unsigned  Idx) const
inline

Retrieve a specific template argument as a type.

Precondition
isArgType(Arg)

Definition at line 682 of file TemplateBase.h.

Referenced by clang::TypeLocReader::VisitFunctionTypeLoc().

◆ getArgs()

const TemplateArgument* clang::TemplateSpecializationType::getArgs ( ) const
inline

Retrieve the template arguments.

Definition at line 4568 of file Type.h.

Referenced by mangleAArch64VectorBase(), and clang::ASTNodeImporter::VisitTemplateSpecializationType().

◆ getNumArgs()

unsigned clang::TemplateSpecializationType::getNumArgs ( ) const
inline

Retrieve the number of template arguments.

Definition at line 4573 of file Type.h.

Referenced by mangleAArch64VectorBase(), clang::ASTTypeWriter::VisitTagType(), and clang::ASTNodeImporter::VisitTemplateSpecializationType().

◆ getTemplateName()

TemplateName clang::TemplateSpecializationType::getTemplateName ( ) const
inline

◆ isCurrentInstantiation()

bool clang::TemplateSpecializationType::isCurrentInstantiation ( ) const
inline

True if this template specialization type matches a current instantiation in the context in which it is found.

Definition at line 4531 of file Type.h.

◆ isSugared()

bool clang::TemplateSpecializationType::isSugared ( ) const
inline

Definition at line 4583 of file Type.h.

◆ isTypeAlias()

bool clang::TemplateSpecializationType::isTypeAlias ( ) const
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.,

template<typename T, typename U, typename V> struct S;
template<typename T, typename U> using A = S<T, int, U>;
template<typename... Ts> struct X {
typedef A<Ts...> type; // not a type alias
};

Definition at line 4550 of file Type.h.

◆ Profile() [1/2]

void clang::TemplateSpecializationType::Profile ( llvm::FoldingSetNodeID &  ID,
const ASTContext Ctx 
)
inline

Definition at line 4589 of file Type.h.

References clang::T.

Referenced by clang::ASTContext::getCanonicalTemplateSpecializationType().

◆ Profile() [2/2]

void TemplateSpecializationType::Profile ( llvm::FoldingSetNodeID &  ID,
TemplateName  T,
ArrayRef< TemplateArgument Args,
const ASTContext Context 
)
static

Definition at line 3261 of file Type.cpp.

References clang::TemplateName::Profile().

◆ template_arguments()

ArrayRef<TemplateArgument> clang::TemplateSpecializationType::template_arguments ( ) const
inline

Definition at line 4579 of file Type.h.

Referenced by DeduceTemplateArguments(), and clang::getParameterABISpelling().

Friends And Related Function Documentation

◆ ASTContext

friend class ASTContext
friend

Definition at line 4498 of file Type.h.


The documentation for this class was generated from the following files: