Skip to content

[basic.exec] Saying "A construct happens before another language construct" is not defined #953

Description

@xmh0511

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions