clang API Documentation
#include <Overload.h>

Public Types | |
| enum | Kind { StandardConversion = 0, UserDefinedConversion, AmbiguousConversion, EllipsisConversion, BadConversion } |
| enum | CompareKind { Better = -1, Indistinguishable = 0, Worse = 1 } |
Public Member Functions | |
| ImplicitConversionSequence () | |
| ~ImplicitConversionSequence () | |
| ImplicitConversionSequence (const ImplicitConversionSequence &Other) | |
| ImplicitConversionSequence & | operator= (const ImplicitConversionSequence &Other) |
| 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 | isEllipsis () const |
| bool | isAmbiguous () const |
| bool | isUserDefined () const |
| bool | isFailure () const |
| bool | isInitialized () const |
| 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 | setEllipsis () |
| void | setUserDefined () |
| void | setAmbiguous () |
| bool | isListInitializationSequence () const |
| Whether this sequence was created by the rules of list-initialization sequences. | |
| void | setListInitializationSequence () |
| bool | isStdInitializerListElement () const |
| Whether the target is really a std::initializer_list, and the sequence only represents the worst element conversion. | |
| void | setStdInitializerListElement (bool V=true) |
| void | DiagnoseAmbiguousConversion (Sema &S, SourceLocation CaretLoc, const PartialDiagnostic &PDiag) const |
| void | DebugPrint () const |
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 385 of file Overload.h.
Definition at line 560 of file Overload.h.
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).
| StandardConversion | |
| UserDefinedConversion | |
| AmbiguousConversion | |
| EllipsisConversion | |
| BadConversion |
Definition at line 391 of file Overload.h.
| clang::ImplicitConversionSequence::ImplicitConversionSequence | ( | ) | [inline] |
Definition at line 442 of file Overload.h.
Referenced by operator=().
| clang::ImplicitConversionSequence::~ImplicitConversionSequence | ( | ) | [inline] |
Definition at line 446 of file Overload.h.
| clang::ImplicitConversionSequence::ImplicitConversionSequence | ( | const ImplicitConversionSequence & | Other | ) | [inline] |
Definition at line 449 of file Overload.h.
References Ambiguous, AmbiguousConversion, Bad, BadConversion, clang::AmbiguousConversionSequence::copyFrom(), EllipsisConversion, Standard, StandardConversion, UserDefined, and UserDefinedConversion.
| void clang::ImplicitConversionSequence::DebugPrint | ( | ) | const |
DebugPrint - Print this implicit conversion sequence to standard error. Useful for debugging overloading issues.
Definition at line 487 of file SemaOverload.cpp.
| void clang::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 7889 of file SemaOverload.cpp.
References clang::Sema::Diag(), and clang::Sema::NoteOverloadCandidate().
Referenced by clang::Sema::PerformImplicitConversion().
| Kind clang::ImplicitConversionSequence::getKind | ( | ) | const [inline] |
Definition at line 471 of file Overload.h.
References isInitialized().
Referenced by clang::Sema::CheckConvertedConstantExpression(), clang::CompareImplicitConversionSequences(), DiagnoseNarrowingInInitList(), getKindRank(), isAmbiguous(), isBad(), isEllipsis(), isStandard(), isUserDefined(), clang::Sema::PerformImplicitConversion(), and clang::TryContextuallyConvertToObjCPointer().
| 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 483 of file Overload.h.
References AmbiguousConversion, BadConversion, EllipsisConversion, getKind(), StandardConversion, and UserDefinedConversion.
Referenced by clang::CompareImplicitConversionSequences().
| bool clang::ImplicitConversionSequence::isAmbiguous | ( | ) | const [inline] |
Definition at line 505 of file Overload.h.
References AmbiguousConversion, and getKind().
Referenced by isFailure().
| bool clang::ImplicitConversionSequence::isBad | ( | ) | const [inline] |
Definition at line 502 of file Overload.h.
References BadConversion, and getKind().
Referenced by clang::Sema::AddBuiltinCandidate(), clang::Sema::AddConversionCandidate(), clang::Sema::AddMethodCandidate(), clang::Sema::AddOverloadCandidate(), clang::Sema::AddSurrogateCandidate(), clang::CompareImplicitConversionSequences(), clang::InitializationSequence::InitializationSequence(), isFailure(), clang::Sema::PerformContextuallyConvertToBool(), clang::Sema::PerformContextuallyConvertToObjCPointer(), clang::Sema::PerformObjectArgumentInitialization(), clang::TryCopyInitialization(), clang::TryListConversion(), and TryReferenceInitializationCore().
| bool clang::ImplicitConversionSequence::isEllipsis | ( | ) | const [inline] |
Definition at line 504 of file Overload.h.
References EllipsisConversion, and getKind().
Referenced by clang::TryListConversion().
| bool clang::ImplicitConversionSequence::isFailure | ( | ) | const [inline] |
Definition at line 507 of file Overload.h.
References isAmbiguous(), and isBad().
Referenced by clang::Sema::CheckSingleAssignmentConstraints(), and clang::TryListConversion().
| 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 512 of file Overload.h.
Referenced by getKind().
| bool clang::ImplicitConversionSequence::isListInitializationSequence | ( | ) | const [inline] |
Whether this sequence was created by the rules of list-initialization sequences.
Definition at line 539 of file Overload.h.
Referenced by clang::CompareImplicitConversionSequences().
| bool clang::ImplicitConversionSequence::isStandard | ( | ) | const [inline] |
Definition at line 503 of file Overload.h.
References getKind(), and StandardConversion.
Referenced by clang::CompareImplicitConversionSequences(), clang::InitializationSequence::InitializationSequence(), and clang::TryListConversion().
| bool clang::ImplicitConversionSequence::isStdInitializerListElement | ( | ) | const [inline] |
Whether the target is really a std::initializer_list, and the sequence only represents the worst element conversion.
Definition at line 549 of file Overload.h.
Referenced by clang::CompareImplicitConversionSequences().
| bool clang::ImplicitConversionSequence::isUserDefined | ( | ) | const [inline] |
Definition at line 506 of file Overload.h.
References getKind(), and UserDefinedConversion.
Referenced by clang::CompareImplicitConversionSequences(), and clang::TryUserDefinedConversion().
| ImplicitConversionSequence& clang::ImplicitConversionSequence::operator= | ( | const ImplicitConversionSequence & | Other | ) | [inline] |
Definition at line 465 of file Overload.h.
References ImplicitConversionSequence().
| void clang::ImplicitConversionSequence::setAmbiguous | ( | ) | [inline] |
Definition at line 531 of file Overload.h.
References Ambiguous, AmbiguousConversion, and clang::AmbiguousConversionSequence::construct().
Referenced by clang::FindConversionForRefInit(), and clang::TryUserDefinedConversion().
| 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 515 of file Overload.h.
References Bad, BadConversion, and clang::BadConversionSequence::init().
Referenced by clang::TryImplicitConversion(), clang::TryListConversion(), clang::TryObjectArgumentInitialization(), clang::TryReferenceInit(), and clang::TryUserDefinedConversion().
| 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 522 of file Overload.h.
References Bad, BadConversion, and clang::BadConversionSequence::init().
| void clang::ImplicitConversionSequence::setEllipsis | ( | ) | [inline] |
Definition at line 529 of file Overload.h.
References EllipsisConversion.
Referenced by clang::Sema::AddOverloadCandidate(), and clang::Sema::AddSurrogateCandidate().
| void clang::ImplicitConversionSequence::setListInitializationSequence | ( | ) | [inline] |
Definition at line 543 of file Overload.h.
Referenced by clang::TryListConversion().
| void clang::ImplicitConversionSequence::setStandard | ( | ) | [inline] |
Definition at line 528 of file Overload.h.
References StandardConversion.
Referenced by clang::InitializationSequence::InitializationSequence(), clang::TryImplicitConversion(), clang::TryListConversion(), tryObjCWritebackConversion(), clang::TryObjectArgumentInitialization(), TryRefInitWithConversionFunction(), clang::TryUserDefinedConversion(), and TryUserDefinedConversion().
| void clang::ImplicitConversionSequence::setStdInitializerListElement | ( | bool | V = true | ) | [inline] |
Definition at line 553 of file Overload.h.
Referenced by clang::TryListConversion().
| void clang::ImplicitConversionSequence::setUserDefined | ( | ) | [inline] |
Definition at line 530 of file Overload.h.
References UserDefinedConversion.
Referenced by clang::Sema::AddSurrogateCandidate(), clang::FindConversionForRefInit(), clang::TryListConversion(), and clang::TryUserDefinedConversion().
| union { ... } |
When ConversionKind == AmbiguousConversion, provides the details of the ambiguous conversion.
Definition at line 435 of file Overload.h.
Referenced by clang::FindConversionForRefInit(), ImplicitConversionSequence(), setAmbiguous(), and clang::TryUserDefinedConversion().
When ConversionKind == BadConversion, provides the details of the bad conversion.
Definition at line 439 of file Overload.h.
Referenced by ImplicitConversionSequence(), clang::Sema::PerformObjectArgumentInitialization(), setBad(), and clang::OverloadCandidate::TryToFixBadConversion().
When ConversionKind == StandardConversion, provides the details of the standard conversion sequence.
Definition at line 427 of file Overload.h.
Referenced by clang::Sema::AddSurrogateCandidate(), clang::Sema::CheckConvertedConstantExpression(), clang::CompareImplicitConversionSequences(), DiagnoseNarrowingInInitList(), ImplicitConversionSequence(), clang::InitializationSequence::InitializationSequence(), clang::Sema::PerformImplicitConversion(), clang::Sema::PerformObjectArgumentInitialization(), clang::TryContextuallyConvertToObjCPointer(), clang::TryImplicitConversion(), clang::TryListConversion(), tryObjCWritebackConversion(), clang::TryObjectArgumentInitialization(), TryRefInitWithConversionFunction(), clang::TryUserDefinedConversion(), and TryUserDefinedConversion().
When ConversionKind == UserDefinedConversion, provides the details of the user-defined conversion sequence.
Definition at line 431 of file Overload.h.
Referenced by clang::Sema::AddSurrogateCandidate(), clang::Sema::CheckConvertedConstantExpression(), clang::CompareImplicitConversionSequences(), clang::Sema::DiagnoseMultipleUserDefinedConversion(), DiagnoseNarrowingInInitList(), clang::FindConversionForRefInit(), ImplicitConversionSequence(), clang::Sema::PerformImplicitConversion(), clang::TryContextuallyConvertToObjCPointer(), clang::TryListConversion(), and clang::TryUserDefinedConversion().