Full name of submitter (unless configured in github; will be published with the issue): Jim X
This is sourced from LWG4310. However, the status is tagged with core. The issue is that we sometimes say one language construct happens-before another construct, where the construct itself is not considered an evaluation; we only define happens-before in terms of evaluations in [intro.races] p7. For example, [thread.thread.constr] p6 says
The completion of the invocation of the constructor synchronizes with the beginning of the invocation of the copy of f.
Neither "completion of the invocation of the constructor" nor "the beginning of the invocation of the copy of f" are evaluations. So, in the current status quo, this is not well-defined for describing any ordering relationship in terms of them.
The completion of the thread represented by *this synchronizes with (6.10.2 [intro.multithread]) the corresponding successful join() return.
Moreover, "join() return" is not an evaluation either.
Suggested Resolution:
For these constructs that are not expressions(i.e., evaluations), we need to define how they participate in reasoning about ordering such that the chain of partial order(i.e., happens-before) cannot be broken because we don't define them yet.
Full name of submitter (unless configured in github; will be published with the issue): Jim X
This is sourced from LWG4310. However, the status is tagged with core. The issue is that we sometimes say one language construct happens-before another construct, where the construct itself is not considered an evaluation; we only define happens-before in terms of evaluations in [intro.races] p7. For example, [thread.thread.constr] p6 says
Neither "completion of the invocation of the constructor" nor "the beginning of the invocation of the copy of f" are evaluations. So, in the current status quo, this is not well-defined for describing any ordering relationship in terms of them.
Moreover, "join() return" is not an evaluation either.
Suggested Resolution:
For these constructs that are not expressions(i.e., evaluations), we need to define how they participate in reasoning about ordering such that the chain of partial order(i.e., happens-before) cannot be broken because we don't define them yet.