clang  19.0.0git
Public Member Functions | Public Attributes | List of all members
clang::StandardConversionSequence Class Reference

StandardConversionSequence - represents a standard conversion sequence (C++ 13.3.3.1.1). More...

#include "clang/Sema/Overload.h"

Public Member Functions

void setFromType (QualType T)
 
void setToType (unsigned Idx, QualType T)
 
void setAllToTypes (QualType T)
 
QualType getFromType () const
 
QualType getToType (unsigned Idx) const
 
void setAsIdentityConversion ()
 StandardConversionSequence - Set the standard conversion sequence to the identity conversion. More...
 
bool isIdentityConversion () const
 
ImplicitConversionRank getRank () const
 getRank - Retrieve the rank of this standard conversion sequence (C++ 13.3.3.1.1p3). More...
 
NarrowingKind getNarrowingKind (ASTContext &Context, const Expr *Converted, APValue &ConstantValue, QualType &ConstantType, bool IgnoreFloatToIntegralConversion=false) const
 Check if this standard conversion sequence represents a narrowing conversion, according to C++11 [dcl.init.list]p7. More...
 
bool isPointerConversionToBool () const
 isPointerConversionToBool - Determines whether this conversion is a conversion of a pointer or pointer-to-member to bool. More...
 
bool isPointerConversionToVoidPointer (ASTContext &Context) const
 isPointerConversionToVoidPointer - Determines whether this conversion is a conversion of a pointer to a void pointer. More...
 
void dump () const
 dump - Print this standard conversion sequence to standard error. More...
 

Public Attributes

ImplicitConversionKind First: 8
 First – The first conversion can be an lvalue-to-rvalue conversion, array-to-pointer conversion, or function-to-pointer conversion. More...
 
ImplicitConversionKind Second: 8
 Second - The second conversion can be an integral promotion, floating point promotion, integral conversion, floating point conversion, floating-integral conversion, pointer conversion, pointer-to-member conversion, or boolean conversion. More...
 
ImplicitConversionKind Element: 8
 Element - Between the second and third conversion a vector or matrix element conversion may occur. More...
 
ImplicitConversionKind Third: 8
 Third - The third conversion can be a qualification conversion or a function conversion. More...
 
unsigned DeprecatedStringLiteralToCharPtr: 1
 Whether this is the deprecated conversion of a string literal to a pointer to non-const character data (C++ 4.2p2). More...
 
unsigned QualificationIncludesObjCLifetime: 1
 Whether the qualification conversion involves a change in the Objective-C lifetime (for automatic reference counting). More...
 
unsigned IncompatibleObjC: 1
 IncompatibleObjC - Whether this is an Objective-C conversion that we should warn about (if we actually use it). More...
 
unsigned ReferenceBinding: 1
 ReferenceBinding - True when this is a reference binding (C++ [over.ics.ref]). More...
 
unsigned DirectBinding: 1
 DirectBinding - True when this is a reference binding that is a direct binding (C++ [dcl.init.ref]). More...
 
unsigned IsLvalueReference: 1
 Whether this is an lvalue reference binding (otherwise, it's an rvalue reference binding). More...
 
unsigned BindsToFunctionLvalue: 1
 Whether we're binding to a function lvalue. More...
 
unsigned BindsToRvalue: 1
 Whether we're binding to an rvalue. More...
 
unsigned BindsImplicitObjectArgumentWithoutRefQualifier: 1
 Whether this binds an implicit object argument to a non-static member function without a ref-qualifier. More...
 
unsigned ObjCLifetimeConversionBinding: 1
 Whether this binds a reference to an object with a different Objective-C lifetime qualifier. More...
 
void * FromTypePtr
 FromType - The type that this conversion is converting from. More...
 
void * ToTypePtrs [3]
 ToType - The types that this conversion is converting to in each step. More...
 
CXXConstructorDeclCopyConstructor
 CopyConstructor - The copy constructor that is used to perform this conversion, when the conversion is actually just the initialization of an object via copy constructor. More...
 
DeclAccessPair FoundCopyConstructor
 

Detailed Description

StandardConversionSequence - represents a standard conversion sequence (C++ 13.3.3.1.1).

A standard conversion sequence contains between zero and three conversions. If a particular conversion is not needed, it will be set to the identity conversion (ICK_Identity).

Definition at line 267 of file Overload.h.

Member Function Documentation

◆ dump()

LLVM_DUMP_METHOD void StandardConversionSequence::dump ( ) const

dump - Print this standard conversion sequence to standard error.

Useful for debugging overloading issues.

Definition at line 558 of file SemaOverload.cpp.

References clang::CopyConstructor, clang::First, GetImplicitConversionName(), and clang::ICK_Identity.

◆ getFromType()

QualType clang::StandardConversionSequence::getFromType ( ) const
inline

Definition at line 370 of file Overload.h.

References FromTypePtr, and clang::QualType::getFromOpaquePtr().

◆ getNarrowingKind()

NarrowingKind StandardConversionSequence::getNarrowingKind ( ASTContext Ctx,
const Expr Converted,
APValue ConstantValue,
QualType ConstantType,
bool  IgnoreFloatToIntegralConversion = false 
) const

Check if this standard conversion sequence represents a narrowing conversion, according to C++11 [dcl.init.list]p7.

Parameters
CtxThe AST context.
ConvertedThe result of applying this standard conversion sequence.
ConstantValueIf this is an NK_Constant_Narrowing conversion, the value of the expression prior to the narrowing conversion.
ConstantTypeIf this is an NK_Constant_Narrowing conversion, the type of the expression prior to the narrowing conversion.
IgnoreFloatToIntegralConversionIf true type-narrowing conversions from floating point types to integral types should be ignored.

Definition at line 339 of file SemaOverload.cpp.

References clang::Type::getAs(), clang::APValue::getFloat(), clang::ASTContext::getFloatingTypeOrder(), clang::ASTContext::getFloatTypeSemantics(), clang::ASTContext::getIntWidth(), clang::ASTContext::getLangOpts(), clang::ICK_Boolean_Conversion, clang::ICK_Complex_Real, clang::ICK_Floating_Conversion, clang::ICK_Floating_Integral, clang::ICK_Floating_Promotion, clang::ICK_Integral_Conversion, IgnoreNarrowingConversion(), clang::Initializer, clang::Type::isComplexType(), clang::APValue::isFloat(), clang::Type::isIntegralOrUnscopedEnumerationType(), clang::Type::isIntegralType(), clang::Type::isRealFloatingType(), clang::Type::isSignedIntegerOrEnumerationType(), clang::NK_Constant_Narrowing, clang::NK_Dependent_Narrowing, clang::NK_Not_Narrowing, clang::NK_Type_Narrowing, clang::NK_Variable_Narrowing, and clang::Expr::EvalResult::Val.

◆ getRank()

ImplicitConversionRank StandardConversionSequence::getRank ( ) const

getRank - Retrieve the rank of this standard conversion sequence (C++ 13.3.3.1.1p3).

The rank is the largest rank of each of the implicit conversions.

Definition at line 238 of file SemaOverload.cpp.

References clang::First, clang::GetConversionRank(), and clang::ICR_Exact_Match.

◆ getToType()

QualType clang::StandardConversionSequence::getToType ( unsigned  Idx) const
inline

Definition at line 374 of file Overload.h.

References clang::QualType::getFromOpaquePtr(), and ToTypePtrs.

◆ isIdentityConversion()

bool clang::StandardConversionSequence::isIdentityConversion ( ) const
inline

Definition at line 381 of file Overload.h.

References Element, clang::ICK_Identity, Second, and Third.

◆ isPointerConversionToBool()

bool StandardConversionSequence::isPointerConversionToBool ( ) const

isPointerConversionToBool - Determines whether this conversion is a conversion of a pointer or pointer-to-member to bool.

This is used as part of the ranking of standard conversion sequences (C++ 13.3.3.2p4).

Definition at line 255 of file SemaOverload.cpp.

References clang::First, clang::ICK_Array_To_Pointer, clang::ICK_Function_To_Pointer, and isBooleanType().

◆ isPointerConversionToVoidPointer()

bool StandardConversionSequence::isPointerConversionToVoidPointer ( ASTContext Context) const

isPointerConversionToVoidPointer - Determines whether this conversion is a conversion of a pointer to a void pointer.

This is used as part of the ranking of standard conversion sequences (C++ 13.3.3.2p4).

Definition at line 276 of file SemaOverload.cpp.

◆ setAllToTypes()

void clang::StandardConversionSequence::setAllToTypes ( QualType  T)
inline

Definition at line 364 of file Overload.h.

References clang::T, and ToTypePtrs.

Referenced by clang::ImplicitConversionSequence::setAsIdentityConversion().

◆ setAsIdentityConversion()

void StandardConversionSequence::setAsIdentityConversion ( )

◆ setFromType()

void clang::StandardConversionSequence::setFromType ( QualType  T)
inline

◆ setToType()

void clang::StandardConversionSequence::setToType ( unsigned  Idx,
QualType  T 
)
inline

Definition at line 359 of file Overload.h.

References clang::T, and ToTypePtrs.

Referenced by clang::ImplicitConversionSequence::getNullptrToBool().

Member Data Documentation

◆ BindsImplicitObjectArgumentWithoutRefQualifier

unsigned clang::StandardConversionSequence::BindsImplicitObjectArgumentWithoutRefQualifier

Whether this binds an implicit object argument to a non-static member function without a ref-qualifier.

Definition at line 332 of file Overload.h.

Referenced by isBetterReferenceBindingKind().

◆ BindsToFunctionLvalue

unsigned clang::StandardConversionSequence::BindsToFunctionLvalue

Whether we're binding to a function lvalue.

Definition at line 323 of file Overload.h.

Referenced by isBetterReferenceBindingKind().

◆ BindsToRvalue

unsigned clang::StandardConversionSequence::BindsToRvalue

Whether we're binding to an rvalue.

Definition at line 327 of file Overload.h.

Referenced by isBetterReferenceBindingKind().

◆ CopyConstructor

CXXConstructorDecl* clang::StandardConversionSequence::CopyConstructor

CopyConstructor - The copy constructor that is used to perform this conversion, when the conversion is actually just the initialization of an object via copy constructor.

Such conversions are either identity conversions or derived-to-base conversions.

Definition at line 354 of file Overload.h.

Referenced by clang::Sema::PerformImplicitConversion().

◆ DeprecatedStringLiteralToCharPtr

unsigned clang::StandardConversionSequence::DeprecatedStringLiteralToCharPtr

Whether this is the deprecated conversion of a string literal to a pointer to non-const character data (C++ 4.2p2).

Definition at line 294 of file Overload.h.

Referenced by hasDeprecatedStringLiteralToCharPtrConversion(), and clang::Sema::PerformImplicitConversion().

◆ DirectBinding

unsigned clang::StandardConversionSequence::DirectBinding

DirectBinding - True when this is a reference binding that is a direct binding (C++ [dcl.init.ref]).

Definition at line 314 of file Overload.h.

◆ Element

ImplicitConversionKind clang::StandardConversionSequence::Element

Element - Between the second and third conversion a vector or matrix element conversion may occur.

If this is not ICK_Identity this conversion is applied element-wise to each element in the vector or matrix.

Definition at line 284 of file Overload.h.

Referenced by dropPointerConversion(), isIdentityConversion(), and clang::Sema::PerformImplicitConversion().

◆ First

ImplicitConversionKind clang::StandardConversionSequence::First

First – The first conversion can be an lvalue-to-rvalue conversion, array-to-pointer conversion, or function-to-pointer conversion.

Definition at line 272 of file Overload.h.

Referenced by clang::ImplicitConversionSequence::getNullptrToBool(), and clang::Sema::PerformImplicitConversion().

◆ FoundCopyConstructor

DeclAccessPair clang::StandardConversionSequence::FoundCopyConstructor

Definition at line 355 of file Overload.h.

Referenced by clang::Sema::PerformImplicitConversion().

◆ FromTypePtr

void* clang::StandardConversionSequence::FromTypePtr

FromType - The type that this conversion is converting from.

This is an opaque pointer that can be translated into a QualType.

Definition at line 342 of file Overload.h.

Referenced by getFromType(), and setFromType().

◆ IncompatibleObjC

unsigned clang::StandardConversionSequence::IncompatibleObjC

IncompatibleObjC - Whether this is an Objective-C conversion that we should warn about (if we actually use it).

Definition at line 304 of file Overload.h.

Referenced by clang::Sema::PerformImplicitConversion().

◆ IsLvalueReference

unsigned clang::StandardConversionSequence::IsLvalueReference

Whether this is an lvalue reference binding (otherwise, it's an rvalue reference binding).

Definition at line 319 of file Overload.h.

Referenced by isBetterReferenceBindingKind().

◆ ObjCLifetimeConversionBinding

unsigned clang::StandardConversionSequence::ObjCLifetimeConversionBinding

Whether this binds a reference to an object with a different Objective-C lifetime qualifier.

Definition at line 337 of file Overload.h.

◆ QualificationIncludesObjCLifetime

unsigned clang::StandardConversionSequence::QualificationIncludesObjCLifetime

Whether the qualification conversion involves a change in the Objective-C lifetime (for automatic reference counting).

Definition at line 299 of file Overload.h.

◆ ReferenceBinding

unsigned clang::StandardConversionSequence::ReferenceBinding

ReferenceBinding - True when this is a reference binding (C++ [over.ics.ref]).

Definition at line 309 of file Overload.h.

◆ Second

ImplicitConversionKind clang::StandardConversionSequence::Second

Second - The second conversion can be an integral promotion, floating point promotion, integral conversion, floating point conversion, floating-integral conversion, pointer conversion, pointer-to-member conversion, or boolean conversion.

Definition at line 278 of file Overload.h.

Referenced by dropPointerConversion(), clang::ImplicitConversionSequence::getNullptrToBool(), isIdentityConversion(), clang::Sema::PerformImplicitConversion(), and clang::Sema::SelectBestMethod().

◆ Third

ImplicitConversionKind clang::StandardConversionSequence::Third

Third - The third conversion can be a qualification conversion or a function conversion.

Definition at line 288 of file Overload.h.

Referenced by dropPointerConversion(), isIdentityConversion(), and clang::Sema::PerformImplicitConversion().

◆ ToTypePtrs

void* clang::StandardConversionSequence::ToTypePtrs[3]

ToType - The types that this conversion is converting to in each step.

This is an opaque pointer that can be translated into a QualType.

Definition at line 347 of file Overload.h.

Referenced by dropPointerConversion(), getToType(), setAllToTypes(), and setToType().


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