An expression or conversion is in an
immediate function context
if it is potentially evaluated and either:
- its innermost enclosing non-block scope is
a function parameter scope of an immediate function,
- it is a subexpression of a manifestly constant-evaluated expression
or conversion, or
- its enclosing statement is enclosed ([stmt.pre]) by
the compound-statement of a consteval if statement ([stmt.if]).
An invocation is an
immediate invocation
if it is a potentially evaluated explicit or implicit invocation of
an immediate function and
is not in an immediate function context
. An aggregate initialization is an immediate invocation
if it evaluates a default member initializer
that has a subexpression that is an immediate-escalating expression
.