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 1: *end note*]

A standard conversion sequence can be empty, i.e., it can consist of no
conversions.

—
A standard conversion sequence will be applied to
an expression if necessary to convert it to a required destination type.

[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.
- When used as the source expression for an initialization (which includes use as an argument in a function call and use as the expression in a return statement).The type of the entity being initialized is (generally) the destination type.

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.

—