A
*standard conversion sequence* is a sequence of standard
conversions in the following order:

- Zero or one conversion from the following set: lvalue-to-rvalue conversion, array-to-pointer conversion, and function-to-pointer conversion.
- Zero or one conversion from the following set: integral promotions, floating-point promotion, integral conversions, floating-point conversions, floating-integral conversions, pointer conversions, pointer-to-member conversions, and boolean conversions.
- Zero or one function pointer conversion.
- Zero or one qualification conversion.

[*Note 2*: *end note*]

Expressions with a given type will be implicitly converted to other
types in several contexts:

— - When used as operands of operators.The operator's requirements for its operands dictate the destination type ([expr.compound]).
- The destination type is bool.
- The destination type is integral.

An expression E can be
*implicitly converted* to a type T if and only if the
declaration T t=E; is well-formed, for some invented temporary
variable t ([dcl.init]).

Certain language constructs require that an expression be converted to a Boolean
value.

An expression E appearing in such a context is said to be
*contextually converted to bool* and is well-formed if and only if
the declaration bool t(E); is well-formed, for some invented temporary
variable t ([dcl.init]).

Certain language constructs require conversion to a value having
one of a specified set of types appropriate to the construct.

An
expression E of class type C appearing in such a
context is said to be
*contextually implicitly converted* to a specified type T and is
well-formed if and only if E can be implicitly converted to a type T
that is determined as follows:
C is searched for non-explicit conversion functions
whose return type is cv T or reference to cv
T such that T is allowed by the context.

There shall be exactly one such T.

The effect of any implicit
conversion is the same as performing the corresponding declaration and initialization
and then using the temporary variable as the result of the conversion.

The result is an lvalue if T is an lvalue reference
type or an rvalue reference to function type ([dcl.ref]),
an xvalue if T is an rvalue reference to object type,
and a prvalue otherwise.

The expression E
is used as a glvalue if and only if the initialization uses it as a glvalue.

[*Note 3*: *end note*]

For class types, user-defined conversions are considered as well;
see [class.conv].

In general, an implicit conversion
sequence ([over.best.ics]) consists of a standard conversion
sequence followed by a user-defined conversion followed by another
standard conversion sequence.

—