Unevaluated operands and “carries a dependency”
6.9.2 [intro.multithread]
Hans Boehm

Created on 2014-01-23.00:00:00 last changed 3 months ago


Date: 2016-02-15.00:00:00

Notes from the February, 2016 meeting:

Action on this issue will be deferred until the specification for memory_order_consume is complete; it should not currently be used.

Date: 2015-10-15.00:00:00

Notes from the October, 2015 meeting:

It appears likely that the text involved will be removed by a revision to the memory_order_consume specification.

Date: 2014-01-23.00:00:00

According to 6.9.2 [intro.multithread] paragraph 9,

An evaluation A carries a dependency to an evaluation B if

  • the value of A is used as an operand of B, unless:

    • ...

    • A is the left operand of a built-in logical AND (&&, see 7.6.14 [expr.log.and]) or logical OR (||, see 7.6.15 [expr.log.or]) operator, or

    • ...

The intent is that this does not apply to the second operands of such operators if the first operand is such that they are not evaluated, but the wording is not clear to that effect. (A similar question applies to the non-selected operand of the conditional operator ?:.)

Date User Action Args
2022-06-11 20:21:09adminsetstatus: concurrency -> open
2018-02-27 00:00:00adminsetmessages: + msg5951
2015-11-10 00:00:00adminsetmessages: + msg5688
2014-01-23 00:00:00admincreate