clang  14.0.0git
Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
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"

Collaboration diagram for clang::ImplicitConversionSequence:
Collaboration graph
[legend]

Public Types

enum  Kind {
  StandardConversion = 0, 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. More...
 
bool isBad () const
 
bool isStandard () const
 
bool isEllipsis () const
 
bool isAmbiguous () const
 
bool isUserDefined () const
 
bool isFailure () const
 
bool isInitialized () const
 Determines whether this conversion sequence has been initialized. More...
 
void setBad (BadConversionSequence::FailureKind Failure, Expr *FromExpr, QualType ToType)
 Sets this sequence as a bad conversion for an explicit argument. More...
 
void setBad (BadConversionSequence::FailureKind Failure, QualType FromType, QualType ToType)
 Sets this sequence as a bad conversion for an implicit argument. More...
 
void setStandard ()
 
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. More...
 
void dump () const
 dump - Print this implicit conversion sequence to standard error. More...
 

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. More...
 

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

Member Enumeration Documentation

◆ CompareKind

Enumerator
Better 
Indistinguishable 
Worse 

Definition at line 724 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).

Enumerator
StandardConversion 
UserDefinedConversion 
AmbiguousConversion 
EllipsisConversion 
BadConversion 

Definition at line 524 of file Overload.h.

Constructor & Destructor Documentation

◆ ImplicitConversionSequence() [1/2]

clang::ImplicitConversionSequence::ImplicitConversionSequence ( )
inline

Definition at line 578 of file Overload.h.

References clang::StandardConversionSequence::setAsIdentityConversion(), and Standard.

Referenced by operator=().

◆ ImplicitConversionSequence() [2/2]

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

◆ ~ImplicitConversionSequence()

clang::ImplicitConversionSequence::~ImplicitConversionSequence ( )
inline

Definition at line 607 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 10428 of file SemaOverload.cpp.

Referenced by 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 542 of file SemaOverload.cpp.

◆ getInitializerListContainerType()

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

Definition at line 697 of file Overload.h.

References hasInitializerListContainerType().

◆ getKind()

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

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

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

◆ getNullptrToBool()

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

◆ hasInitializerListContainerType()

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

Definition at line 687 of file Overload.h.

Referenced by getInitializerListContainerType().

◆ isAmbiguous()

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

Definition at line 645 of file Overload.h.

References AmbiguousConversion, and getKind().

Referenced by isFailure().

◆ isBad()

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

◆ isEllipsis()

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

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

Referenced by getKind().

◆ isInitializerListOfIncompleteArray()

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

Definition at line 694 of file Overload.h.

◆ isStandard()

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

Definition at line 643 of file Overload.h.

References getKind(), and StandardConversion.

Referenced by hasDeprecatedStringLiteralToCharPtrConversion().

◆ isUserDefined()

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

Definition at line 646 of file Overload.h.

References getKind(), and UserDefinedConversion.

Referenced by hasDeprecatedStringLiteralToCharPtrConversion().

◆ operator=()

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

Definition at line 601 of file Overload.h.

References ImplicitConversionSequence().

◆ setAmbiguous()

void clang::ImplicitConversionSequence::setAmbiguous ( )
inline

◆ setAsIdentityConversion()

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

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

References Bad, BadConversion, and clang::BadConversionSequence::init().

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

References Bad, BadConversion, and clang::BadConversionSequence::init().

◆ setEllipsis()

void clang::ImplicitConversionSequence::setEllipsis ( )
inline

Definition at line 669 of file Overload.h.

References EllipsisConversion.

◆ setInitializerListContainerType()

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

Definition at line 690 of file Overload.h.

◆ setStandard()

void clang::ImplicitConversionSequence::setStandard ( )
inline

Definition at line 668 of file Overload.h.

References StandardConversion.

Referenced by getNullptrToBool(), and setAsIdentityConversion().

◆ setUserDefined()

void clang::ImplicitConversionSequence::setUserDefined ( )
inline

Definition at line 670 of file Overload.h.

References UserDefinedConversion.

Member Data Documentation

◆ @225

union { ... }

◆ Ambiguous

AmbiguousConversionSequence clang::ImplicitConversionSequence::Ambiguous

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

Definition at line 571 of file Overload.h.

Referenced by ImplicitConversionSequence(), and setAmbiguous().

◆ Bad

BadConversionSequence clang::ImplicitConversionSequence::Bad

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

Definition at line 575 of file Overload.h.

Referenced by ImplicitConversionSequence(), and setBad().

◆ Standard

StandardConversionSequence clang::ImplicitConversionSequence::Standard

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

Definition at line 563 of file Overload.h.

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

◆ UserDefined

UserDefinedConversionSequence clang::ImplicitConversionSequence::UserDefined

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

Definition at line 567 of file Overload.h.

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


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