Skip to content

[class.cdtor] p2 needs changes/notes to clarify intent and limitations #6445

@eisenwave

Description

@eisenwave

[class.cdtor] p2 needs a note to clarify its limitations.

Bugs which lead back to this paragraph

GCC contributers have falsely interpreted this paragraph to mean that this can be marked __restrict. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82899. A more detailed explanation for why this reading is incorrect can be found here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110912.

Proposed Solution (1/2)

  1. I think the wording should be made more conventional, by using the term "value computation" instead of saying "the value ... thus obtained".
  2. Only scalar type objects can be accessed [defns.access] Note 1, so any object which has subobjects cannot be accessed.
 During the construction of an object, if the value of
-the object or
 any of its subobjects is accessed through a glvalue that is not obtained, directly or indirectly,
 from the constructor's this pointer,
-the value of the object or subobject thus obtained is unspecified.
+the value computation of this subobject yields an unspecified value.

Proposed Solution (2/2)

Furthermore, it may be beneficial to add a note which clarifies that a side effect on the subobjects through such a glvalue will have the expected effect. The attached example could also include a case such as:

struct S {
    int x;
    S(int &r) {
        r = 0;  // if r refers to S::x, then this is equivalent to x = 0
    }
};

S s(s.x);

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