[stmt.iter.general] (original) (raw)
8 Statements [stmt]
8.6 Iteration statements [stmt.iter]
8.6.1 General [stmt.iter.general]
Iteration statements specify looping.
The substatement in an iteration-statement implicitly defines a block scope which is entered and exited each time through the loop.
If the substatement in an iteration-statement is a single statement and not a compound-statement, it is as if it was rewritten to be a compound-statement containing the original statement.
[Example 1:
while (--x >= 0) int i;can be equivalently rewritten aswhile (--x >= 0) { int i;}
Thus after the while statement, i is no longer in scope.
— _end example_]
A trivial infinite loop is a trivially empty iteration statement for which the converted controlling expression is a constant expression, when interpreted as a constant-expression ([expr.const]), and evaluates to true.
The statement of a trivial infinite loop is replaced with a call to the function std::this_thread::yield ([thread.thread.this]); it is implementation-defined whether this replacement occurs on freestanding implementations.
[Note 2:
In a freestanding environment, concurrent forward progress is not guaranteed; such systems therefore require explicit cooperation.
A call to yield can add implicit cooperation where none is otherwise intended.
— _end note_]