This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 115g. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2024-12-16


2587. Visible side effects and initial value of an object

Section: 6.9.2.2  [intro.races]     Status: review     Submitter: Andrey Erokhin     Date: 2022-05-10

Subclause 6.9.2.2 [intro.races] paragraph 13 specifies:

A visible side effect A on a scalar object or bit-field M with respect to a value computation B of M satisfies the conditions: The value of a non-atomic scalar object or bit-field M, as determined by evaluation B, shall be the value stored by the visible side effect A.

However, a side effect is defined as 6.9.1 [intro.execution] paragraph 7:

Reading an object designated by a volatile glvalue (7.2.1 [basic.lval]), modifying an object, calling a library I/O function, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment.

It seems that initialization of an object is not a side effect, and thus the value of an scalar object can never be the value obtained during initialization.

Proposed resolution:

Change in 6.9.1 [intro.execution] paragraph 7 as follows:

Reading an object designated by a volatile glvalue (7.2.1 [basic.lval]), modifying an object (including initialization), calling a library I/O function, or calling a function that does any of those operations are all side effects, which are changes in the state of the execution environment. ...