An *attribute-argument-clause* shall be present and
shall have the form:
The expression is contextually converted to bool ([conv.general]).

The expression is not evaluated.

If the converted expression would evaluate to true
at the point where the assumption appears,
the assumption has no effect.

Otherwise, the behavior is undefined.

[*Note 1*: *end note*]

The expression is potentially evaluated ([basic.def.odr]).

The use of assumptions is intended to allow implementations
to analyze the form of the expression and
deduce information used to optimize the program.

Implementations are not required to deduce
any information from any particular assumption.

It is expected that the value of
a *has-attribute-expression* for the assume attribute
is 0
if an implementation does not attempt to deduce
any such information from assumptions.

— [*Example 1*: int divide_by_32(int x) {
[[assume(x >= 0)]];
return x/32; // The instructions produced for the division
// may omit handling of negative values.
}
int f(int y) {
[[assume(++y == 43)]]; // y is not incremented
return y; // statement may be replaced with return 42;
}
— *end example*]