clang 22.0.0git
clang::ImplicitConversionSequence Class Reference

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"

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)
ImplicitConversionSequenceoperator= (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 isPerfect (const ASTContext &C) const
 A conversion sequence is perfect if it is an identity conversion and the type of the source is the same as the type of the target.
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.

Static Public Member Functions

static ImplicitConversionSequence getNullptrToBool (QualType SourceType, QualType DestType, bool NeedLValToRVal)
 Form an "implicit" conversion sequence from nullptr_t to bool, for a direct-initialization of a bool object from nullptr_t.

Public Attributes

union { 
   StandardConversionSequence   Standard 
 When ConversionKind == StandardConversion, provides the details of the standard conversion sequence. More...
   UserDefinedConversionSequence   UserDefined 
 When ConversionKind == UserDefinedConversion, provides the details of the user-defined conversion sequence. More...
   AmbiguousConversionSequence   Ambiguous 
 When ConversionKind == AmbiguousConversion, provides the details of the ambiguous conversion. More...
   BadConversionSequence   Bad 
 When ConversionKind == BadConversion, provides the details of the bad conversion. More...
}; 

Detailed Description

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 615 of file Overload.h.

Member Enumeration Documentation

◆ CompareKind

Enumerator
Better 
Indistinguishable 
Worse 

Definition at line 839 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 624 of file Overload.h.

Constructor & Destructor Documentation

◆ ImplicitConversionSequence() [1/2]

clang::ImplicitConversionSequence::ImplicitConversionSequence ( )
inline

Definition at line 681 of file Overload.h.

References false, and Standard.

Referenced by getNullptrToBool(), ImplicitConversionSequence(), and operator=().

◆ ImplicitConversionSequence() [2/2]

clang::ImplicitConversionSequence::ImplicitConversionSequence ( const ImplicitConversionSequence & Other)
inline

◆ ~ImplicitConversionSequence()

clang::ImplicitConversionSequence::~ImplicitConversionSequence ( )
inline

Definition at line 711 of file Overload.h.

Member Function Documentation

◆ DiagnoseAmbiguousConversion()

void ImplicitConversionSequence::DiagnoseAmbiguousConversion ( Sema & S,
SourceLocation CaretLoc,
const PartialDiagnostic & PDiag ) const

Diagnoses an ambiguous conversion.

The partial diagnostic is the "lead" diagnostic; it will be given two arguments, the source and target types of the conversion.

Definition at line 11757 of file SemaOverload.cpp.

References Ambiguous, clang::SemaBase::Diag(), clang::Sema::Diags, clang::DiagnosticsEngine::getNumOverloadCandidatesToShow(), int, clang::Sema::NoteOverloadCandidate(), and clang::DiagnosticsEngine::overloadCandidatesShown().

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

◆ dump()

void ImplicitConversionSequence::dump ( ) const

dump - Print this implicit conversion sequence to standard error.

Useful for debugging overloading issues.

Definition at line 668 of file SemaOverload.cpp.

References AmbiguousConversion, BadConversion, EllipsisConversion, hasInitializerListContainerType(), Standard, StandardConversion, UserDefined, and UserDefinedConversion.

◆ getInitializerListContainerType()

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

Definition at line 812 of file Overload.h.

References hasInitializerListContainerType().

Referenced by CompareImplicitConversionSequences().

◆ getKind()

◆ getKindRank()

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

Return a ranking of the implicit conversion sequence kind, where smaller ranks represent better conversion sequences.

In particular, this routine gives user-defined conversion sequences and ambiguous conversion sequences the same rank, per C++ [over.best.ics]p10.

Definition at line 727 of file Overload.h.

References AmbiguousConversion, BadConversion, EllipsisConversion, getKind(), StandardConversion, StaticObjectArgumentConversion, and UserDefinedConversion.

Referenced by CompareImplicitConversionSequences().

◆ getNullptrToBool()

ImplicitConversionSequence clang::ImplicitConversionSequence::getNullptrToBool ( QualType SourceType,
QualType DestType,
bool NeedLValToRVal )
inlinestatic

◆ hasInitializerListContainerType()

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

◆ isAmbiguous()

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

Definition at line 753 of file Overload.h.

References AmbiguousConversion, and getKind().

Referenced by isFailure(), and NoteAmbiguousUserConversions().

◆ isBad()

◆ isEllipsis()

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

Definition at line 752 of file Overload.h.

References EllipsisConversion, and getKind().

◆ 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 760 of file Overload.h.

Referenced by getKind().

◆ isInitializerListOfIncompleteArray()

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

Definition at line 809 of file Overload.h.

Referenced by CompareImplicitConversionSequences().

◆ isPerfect()

bool clang::ImplicitConversionSequence::isPerfect ( const ASTContext & C) const
inline

A conversion sequence is perfect if it is an identity conversion and the type of the source is the same as the type of the target.

Definition at line 796 of file Overload.h.

References clang::C, isStandard(), and Standard.

◆ isStandard()

◆ isStaticObjectArgument()

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

Definition at line 749 of file Overload.h.

References getKind(), and StaticObjectArgumentConversion.

◆ isUserDefined()

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

◆ operator=()

ImplicitConversionSequence & clang::ImplicitConversionSequence::operator= ( const ImplicitConversionSequence & Other)
inline

Definition at line 705 of file Overload.h.

References ImplicitConversionSequence(), and clang::Other.

◆ setAmbiguous()

void clang::ImplicitConversionSequence::setAmbiguous ( )
inline

Definition at line 781 of file Overload.h.

References Ambiguous, and AmbiguousConversion.

Referenced by FindConversionForRefInit(), and TryUserDefinedConversion().

◆ setAsIdentityConversion()

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

Definition at line 787 of file Overload.h.

References setStandard(), Standard, and clang::T.

◆ setBad() [1/2]

void clang::ImplicitConversionSequence::setBad ( BadConversionSequence::FailureKind Failure,
Expr * FromExpr,
QualType ToType )
inline

Sets this sequence as a bad conversion for an explicit argument.

Definition at line 763 of file Overload.h.

References Bad, and BadConversion.

Referenced by TryImplicitConversion(), TryListConversion(), TryObjectArgumentInitialization(), TryReferenceInit(), and TryUserDefinedConversion().

◆ setBad() [2/2]

void clang::ImplicitConversionSequence::setBad ( BadConversionSequence::FailureKind Failure,
QualType FromType,
QualType ToType )
inline

Sets this sequence as a bad conversion for an implicit argument.

Definition at line 770 of file Overload.h.

References Bad, and BadConversion.

◆ setEllipsis()

void clang::ImplicitConversionSequence::setEllipsis ( )
inline

Definition at line 778 of file Overload.h.

References EllipsisConversion.

◆ setInitializerListContainerType()

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

Definition at line 805 of file Overload.h.

References clang::T.

Referenced by TryListConversion().

◆ setStandard()

◆ setStaticObjectArgument()

void clang::ImplicitConversionSequence::setStaticObjectArgument ( )
inline

Definition at line 777 of file Overload.h.

References StaticObjectArgumentConversion.

◆ setUserDefined()

void clang::ImplicitConversionSequence::setUserDefined ( )
inline

Definition at line 779 of file Overload.h.

References UserDefinedConversion.

Referenced by FindConversionForRefInit(), and TryUserDefinedConversion().

Member Data Documentation

◆ [union]

◆ Ambiguous

AmbiguousConversionSequence clang::ImplicitConversionSequence::Ambiguous

When ConversionKind == AmbiguousConversion, provides the details of the ambiguous conversion.

Definition at line 674 of file Overload.h.

Referenced by DiagnoseAmbiguousConversion(), FindConversionForRefInit(), ImplicitConversionSequence(), setAmbiguous(), and TryUserDefinedConversion().

◆ Bad

BadConversionSequence clang::ImplicitConversionSequence::Bad

When ConversionKind == BadConversion, provides the details of the bad conversion.

Definition at line 678 of file Overload.h.

Referenced by DiagnoseBadConversion(), ImplicitConversionSequence(), clang::Sema::PerformImplicitObjectArgumentInitialization(), setBad(), setBad(), and TryObjectArgumentInitialization().

◆ Standard

◆ UserDefined


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