clang 8.0.0

Public Types | 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:
[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)
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. 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 | isStdInitializerListElement () const
| Whether the target is really a std::initializer_list, and the sequence only represents the worst element conversion. More...
void | setStdInitializerListElement (bool V=true)
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...

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

## Member Enumeration Documentation

## ◆ CompareKind

enum clang::ImplicitConversionSequence::CompareKind

Enumerator
Better |
Indistinguishable |
Worse |

Definition at line 657 of file Overload.h.

## ◆ Kind

enum clang::ImplicitConversionSequence::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 493 of file Overload.h.

## Constructor & Destructor Documentation

## ◆ ImplicitConversionSequence() [1/2]

clang::ImplicitConversionSequence::ImplicitConversionSequence | ( |  | ) |
| inline

Definition at line 541 of file Overload.h.

## ◆ ImplicitConversionSequence() [2/2]

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

Definition at line 546 of file Overload.h.

References Ambiguous, Bad, Standard, Uninitialized, and UserDefined.

## ◆ ~ImplicitConversionSequence()

clang::ImplicitConversionSequence::~ImplicitConversionSequence | ( |  | ) |
| inline

Definition at line 566 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 9657 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 525 of file SemaOverload.cpp.

## ◆ getKind()

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

Definition at line 570 of file Overload.h.

Referenced by CheckConvertedConstantExpression(), CompareImplicitConversionSequences(), DiagnoseNarrowingInInitList(), clang::Sema::PerformImplicitConversion(), and TryContextuallyConvertToObjCPointer().

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

References getKind().

Referenced by CompareImplicitConversionSequences().

## ◆ isAmbiguous()

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

Definition at line 604 of file Overload.h.

References getKind().

## ◆ isBad()

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

Definition at line 601 of file Overload.h.

References getKind().

Referenced by CompareImplicitConversionSequences(), clang::Sema::PerformContextuallyConvertToBool(), TryCopyInitialization(), TryListConversion(), and TryReferenceInitializationCore().

## ◆ isEllipsis()

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

Definition at line 603 of file Overload.h.

References getKind().

## ◆ isFailure()

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

Definition at line 606 of file Overload.h.

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

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

References Uninitialized.

## ◆ isStandard()

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

Definition at line 602 of file Overload.h.

References getKind().

Referenced by CompareImplicitConversionSequences(), and hasDeprecatedStringLiteralToCharPtrConversion().

## ◆ isStdInitializerListElement()

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

Referenced by CompareImplicitConversionSequences().

## ◆ isUserDefined()

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

Definition at line 605 of file Overload.h.

References getKind().

Referenced by CompareImplicitConversionSequences(), and hasDeprecatedStringLiteralToCharPtrConversion().

## ◆ operator=()

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

Definition at line 560 of file Overload.h.

## ◆ setAmbiguous()

void clang::ImplicitConversionSequence::setAmbiguous | ( |  | ) |
| inline

Definition at line 631 of file Overload.h.

Referenced by FindConversionForRefInit(), and TryUserDefinedConversion().

## ◆ setAsIdentityConversion()

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

Definition at line 637 of file Overload.h.

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

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

## ◆ setEllipsis()

void clang::ImplicitConversionSequence::setEllipsis | ( |  | ) |
| inline

Definition at line 628 of file Overload.h.

## ◆ setStandard()

void clang::ImplicitConversionSequence::setStandard | ( |  | ) |
| inline

Definition at line 627 of file Overload.h.

Referenced by TryImplicitConversion(), TryListConversion(), TryListInitialization(), tryObjCWritebackConversion(), TryObjectArgumentInitialization(), TryRefInitWithConversionFunction(), and TryUserDefinedConversion().

## ◆ setStdInitializerListElement()

void clang::ImplicitConversionSequence::setStdInitializerListElement | ( | bool | V = `true` | ) |
| inline

Definition at line 650 of file Overload.h.

Referenced by TryListConversion().

## ◆ setUserDefined()

void clang::ImplicitConversionSequence::setUserDefined | ( |  | ) |
| inline

Definition at line 629 of file Overload.h.

Referenced by FindConversionForRefInit(), TryListConversion(), and TryUserDefinedConversion().

## Member Data Documentation

## ◆ @232

union { ... }

## ◆ Ambiguous

AmbiguousConversionSequence clang::ImplicitConversionSequence::Ambiguous

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

Definition at line 534 of file Overload.h.

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

## ◆ Bad

BadConversionSequence clang::ImplicitConversionSequence::Bad

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

Definition at line 538 of file Overload.h.

Referenced by ImplicitConversionSequence().

## ◆ Standard

StandardConversionSequence clang::ImplicitConversionSequence::Standard

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

Definition at line 526 of file Overload.h.

Referenced by CheckConvertedConstantExpression(), CompareImplicitConversionSequences(), DiagnoseNarrowingInInitList(), hasDeprecatedStringLiteralToCharPtrConversion(), ImplicitConversionSequence(), clang::Sema::PerformImplicitConversion(), TryContextuallyConvertToObjCPointer(), TryImplicitConversion(), TryListConversion(), TryListInitialization(), tryObjCWritebackConversion(), TryObjectArgumentInitialization(), TryRefInitWithConversionFunction(), and TryUserDefinedConversion().

## ◆ UserDefined

UserDefinedConversionSequence clang::ImplicitConversionSequence::UserDefined

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

Definition at line 530 of file Overload.h.

Referenced by CheckConvertedConstantExpression(), CompareImplicitConversionSequences(), clang::Sema::DiagnoseMultipleUserDefinedConversion(), DiagnoseNarrowingInInitList(), FindConversionForRefInit(), hasDeprecatedStringLiteralToCharPtrConversion(), ImplicitConversionSequence(), clang::Sema::PerformImplicitConversion(), TryContextuallyConvertToObjCPointer(), TryListConversion(), and TryUserDefinedConversion().

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

- include/clang/Sema/Overload.h
- lib/Sema/SemaOverload.cpp