clang API Documentation

clang::ImplicitConversionSequence Struct Reference

#include <Overload.h>

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

List of all members.

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)
ImplicitConversionSequenceoperator= (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 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 ()
void DebugPrint () const

Public Attributes

union {
   StandardConversionSequence   Standard
   UserDefinedConversionSequence   UserDefined
   AmbiguousConversionSequence   Ambiguous
   BadConversionSequence   Bad
}; 

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


Member Enumeration Documentation

Enumerator:
Better 
Indistinguishable 
Worse 

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

Enumerator:
StandardConversion 
UserDefinedConversion 
AmbiguousConversion 
EllipsisConversion 
BadConversion 

Definition at line 322 of file Overload.h.


Constructor & Destructor Documentation

clang::ImplicitConversionSequence::ImplicitConversionSequence (  )  [inline]

Definition at line 366 of file Overload.h.

Referenced by operator=().

clang::ImplicitConversionSequence::~ImplicitConversionSequence (  )  [inline]

Definition at line 367 of file Overload.h.

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

Member Function Documentation

void clang::ImplicitConversionSequence::DebugPrint (  )  const

DebugPrint - Print this implicit conversion sequence to standard error. Useful for debugging overloading issues.

Definition at line 248 of file SemaOverload.cpp.

References AmbiguousConversion, BadConversion, clang::UserDefinedConversionSequence::DebugPrint(), clang::StandardConversionSequence::DebugPrint(), EllipsisConversion, Standard, StandardConversion, UserDefined, and UserDefinedConversion.

Kind clang::ImplicitConversionSequence::getKind (  )  const [inline]
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 402 of file Overload.h.

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

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

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

Definition at line 424 of file Overload.h.

References AmbiguousConversion, and getKind().

bool clang::ImplicitConversionSequence::isBad (  )  const [inline]
bool clang::ImplicitConversionSequence::isEllipsis (  )  const [inline]

Definition at line 423 of file Overload.h.

References EllipsisConversion, and getKind().

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

Referenced by getKind().

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

Definition at line 422 of file Overload.h.

References getKind(), and StandardConversion.

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

bool clang::ImplicitConversionSequence::isUserDefined (  )  const [inline]
ImplicitConversionSequence& clang::ImplicitConversionSequence::operator= ( const ImplicitConversionSequence Other  )  [inline]

Definition at line 384 of file Overload.h.

References ImplicitConversionSequence().

void clang::ImplicitConversionSequence::setAmbiguous (  )  [inline]
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 440 of file Overload.h.

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

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

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

Referenced by clang::Sema::TryImplicitConversion(), clang::Sema::TryObjectArgumentInitialization(), and clang::TryReferenceInit().

void clang::ImplicitConversionSequence::setEllipsis (  )  [inline]

Definition at line 447 of file Overload.h.

References EllipsisConversion.

void clang::ImplicitConversionSequence::setStandard (  )  [inline]
void clang::ImplicitConversionSequence::setUserDefined (  )  [inline]

Member Data Documentation

union { ... }

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

Definition at line 359 of file Overload.h.

Referenced by clang::Sema::DiagnoseAmbiguousConversion(), clang::FindConversionForRefInit(), ImplicitConversionSequence(), setAmbiguous(), and clang::Sema::TryImplicitConversion().

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

Definition at line 363 of file Overload.h.

Referenced by ImplicitConversionSequence(), and setBad().


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