clang: clang::ImplicitConversionSequence Class Reference (original) (raw)

ImplicitConversionSequence - Represents an implicit conversion sequence, which may be a standard conversion sequence (C++ 13.3.3.1.1), user-defined conversion sequence (C++ 13.3.3.1.2), or an ellipsis conversion sequence (C++ 13.3.3.1.3). More...

#include "[clang/Sema/Overload.h](Overload%5F8h%5Fsource.html)"

Public Types
enum Kind { StandardConversion = 0 , StaticObjectArgumentConversion, UserDefinedConversion, AmbiguousConversion, EllipsisConversion, BadConversion }
Kind - The kind of implicit conversion sequence. More...
enum CompareKind { Better = -1 , Indistinguishable = 0 , Worse = 1 }
Public Member Functions
ImplicitConversionSequence ()
ImplicitConversionSequence (const ImplicitConversionSequence &Other)
ImplicitConversionSequence & operator= (const ImplicitConversionSequence &Other)
~ImplicitConversionSequence ()
Kind getKind () const
unsigned getKindRank () const
Return a ranking of the implicit conversion sequence kind, where smaller ranks represent better conversion sequences.
bool isBad () const
bool isStandard () const
bool isStaticObjectArgument () const
bool isEllipsis () const
bool isAmbiguous () const
bool isUserDefined () const
bool isFailure () const
bool isInitialized () const
Determines whether this conversion sequence has been initialized.
void setBad (BadConversionSequence::FailureKind Failure, Expr *FromExpr, QualType ToType)
Sets this sequence as a bad conversion for an explicit argument.
void setBad (BadConversionSequence::FailureKind Failure, QualType FromType, QualType ToType)
Sets this sequence as a bad conversion for an implicit argument.
void setStandard ()
void setStaticObjectArgument ()
void setEllipsis ()
void setUserDefined ()
void setAmbiguous ()
void setAsIdentityConversion (QualType T)
bool hasInitializerListContainerType () const
void setInitializerListContainerType (QualType T, bool IA)
bool isInitializerListOfIncompleteArray () const
QualType getInitializerListContainerType () const
void DiagnoseAmbiguousConversion (Sema &S, SourceLocation CaretLoc, const PartialDiagnostic &PDiag) const
Diagnoses an ambiguous conversion.
void dump () const
dump - Print this implicit conversion sequence to standard error.
Public Attributes
union {
StandardConversionSequence Standard
UserDefinedConversionSequence UserDefined
AmbiguousConversionSequence Ambiguous
BadConversionSequence Bad
};

ImplicitConversionSequence - Represents an implicit conversion sequence, which may be a standard conversion sequence (C++ 13.3.3.1.1), user-defined conversion sequence (C++ 13.3.3.1.2), or an ellipsis conversion sequence (C++ 13.3.3.1.3).

Definition at line 567 of file Overload.h.

CompareKind

Enumerator
Better
Indistinguishable
Worse

Definition at line 785 of file Overload.h.

Kind

Kind - The kind of implicit conversion sequence.

BadConversion specifies that there is no conversion from the source type to the target type. AmbiguousConversion represents the unique ambiguous conversion (C++0x [over.best.ics]p10). StaticObjectArgumentConversion represents the conversion rules for the synthesized first argument of calls to static member functions ([over.best.ics.general]p8).

Enumerator
StandardConversion
StaticObjectArgumentConversion
UserDefinedConversion
AmbiguousConversion
EllipsisConversion
BadConversion

Definition at line 576 of file Overload.h.

clang::ImplicitConversionSequence::ImplicitConversionSequence ( ) inline

ImplicitConversionSequence() [2/2]

Definition at line 639 of file Overload.h.

References Ambiguous, AmbiguousConversion, Bad, BadConversion, clang::AmbiguousConversionSequence::copyFrom(), EllipsisConversion, clang::Other, Standard, StandardConversion, StaticObjectArgumentConversion, UserDefined, and UserDefinedConversion.

~ImplicitConversionSequence()

clang::ImplicitConversionSequence::~ImplicitConversionSequence ( ) inline

DiagnoseAmbiguousConversion()

dump()

void ImplicitConversionSequence::dump ( ) const

getInitializerListContainerType()

QualType clang::ImplicitConversionSequence::getInitializerListContainerType ( ) const inline

getKind()

Kind clang::ImplicitConversionSequence::getKind ( ) const inline

Definition at line 667 of file Overload.h.

References isInitialized().

Referenced by clang::Sema::AddConversionCandidate(), BuildConvertedConstantExpression(), CompareImplicitConversionSequences(), DiagnoseNarrowingInInitList(), getKindRank(), isAmbiguous(), isBad(), isEllipsis(), isStandard(), isStaticObjectArgument(), isUserDefined(), clang::Sema::PerformImplicitConversion(), and TryContextuallyConvertToObjCPointer().

getKindRank()

unsigned clang::ImplicitConversionSequence::getKindRank ( ) const inline

getNullptrToBool()

Form an "implicit" conversion sequence from nullptr_t to bool, for a direct-initialization of a bool object from nullptr_t.

Definition at line 766 of file Overload.h.

References clang::StandardConversionSequence::First, clang::ICK_Boolean_Conversion, clang::ICK_Lvalue_To_Rvalue, clang::StandardConversionSequence::Second, clang::StandardConversionSequence::setAsIdentityConversion(), clang::StandardConversionSequence::setFromType(), setStandard(), clang::StandardConversionSequence::setToType(), and Standard.

Referenced by clang::InitializationSequence::InitializeFrom(), and TryContextuallyConvertToBool().

hasInitializerListContainerType()

bool clang::ImplicitConversionSequence::hasInitializerListContainerType ( ) const inline

isAmbiguous()

bool clang::ImplicitConversionSequence::isAmbiguous ( ) const inline

isBad()

bool clang::ImplicitConversionSequence::isBad ( ) const inline

Definition at line 699 of file Overload.h.

References BadConversion, and getKind().

Referenced by clang::Sema::AddSurrogateCandidate(), CompareImplicitConversionSequences(), DiagnoseBadConversion(), clang::InitializationSequence::InitializeFrom(), isFailure(), NoteAmbiguousUserConversions(), clang::Sema::PerformContextuallyConvertToBool(), clang::Sema::PerformContextuallyConvertToObjCPointer(), clang::Sema::PerformImplicitObjectArgumentInitialization(), clang::Sema::SelectBestMethod(), TryCopyInitialization(), TryListConversion(), TryObjectArgumentInitialization(), and TryReferenceInitializationCore().

isEllipsis()

bool clang::ImplicitConversionSequence::isEllipsis ( ) const inline

isFailure()

bool clang::ImplicitConversionSequence::isFailure ( ) const inline

isInitialized()

bool clang::ImplicitConversionSequence::isInitialized ( ) const inline

Determines whether this conversion sequence has been initialized.

Most operations should never need to query uninitialized conversions and should assert as above.

Definition at line 712 of file Overload.h.

Referenced by getKind().

isInitializerListOfIncompleteArray()

bool clang::ImplicitConversionSequence::isInitializerListOfIncompleteArray ( ) const inline

isStandard()

bool clang::ImplicitConversionSequence::isStandard ( ) const inline

isStaticObjectArgument()

bool clang::ImplicitConversionSequence::isStaticObjectArgument ( ) const inline

isUserDefined()

bool clang::ImplicitConversionSequence::isUserDefined ( ) const inline

operator=()

setAmbiguous()

void clang::ImplicitConversionSequence::setAmbiguous ( ) inline

setAsIdentityConversion()

void clang::ImplicitConversionSequence::setAsIdentityConversion ( QualType T) inline

setBad() [1/2]

setBad() [2/2]

setEllipsis()

void clang::ImplicitConversionSequence::setEllipsis ( ) inline

setInitializerListContainerType()

void clang::ImplicitConversionSequence::setInitializerListContainerType ( QualType T, bool IA ) inline

setStandard()

void clang::ImplicitConversionSequence::setStandard ( ) inline

setStaticObjectArgument()

void clang::ImplicitConversionSequence::setStaticObjectArgument ( ) inline

setUserDefined()

void clang::ImplicitConversionSequence::setUserDefined ( ) inline

union { ... } clang::ImplicitConversionSequence::@242

Ambiguous

Bad

Standard

When ConversionKind == StandardConversion, provides the details of the standard conversion sequence.

Definition at line 618 of file Overload.h.

Referenced by clang::Sema::AddConversionCandidate(), clang::Sema::AddSurrogateCandidate(), BuildConvertedConstantExpression(), CheckC23ConstexprInitConversion(), CompareImplicitConversionSequences(), DiagnoseNarrowingInInitList(), dump(), getNullptrToBool(), hasDeprecatedStringLiteralToCharPtrConversion(), ImplicitConversionSequence(), clang::InitializationSequence::InitializeFrom(), clang::Sema::PerformImplicitConversion(), clang::Sema::PerformImplicitObjectArgumentInitialization(), clang::Sema::SelectBestMethod(), setAsIdentityConversion(), TryContextuallyConvertToObjCPointer(), TryImplicitConversion(), TryListInitialization(), tryObjCWritebackConversion(), TryObjectArgumentInitialization(), TryReferenceInit(), TryRefInitWithConversionFunction(), and TryUserDefinedConversion().

UserDefined

When ConversionKind == UserDefinedConversion, provides the details of the user-defined conversion sequence.

Definition at line 622 of file Overload.h.

Referenced by BuildConvertedConstantExpression(), CompareImplicitConversionSequences(), clang::Sema::DiagnoseMultipleUserDefinedConversion(), DiagnoseNarrowingInInitList(), dump(), FindConversionForRefInit(), hasDeprecatedStringLiteralToCharPtrConversion(), ImplicitConversionSequence(), clang::Sema::PerformImplicitConversion(), TryContextuallyConvertToObjCPointer(), TryReferenceInit(), and TryUserDefinedConversion().


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