Created on 2016-03-23.00:00:00 last changed 47 months ago
Proposed resolution (March, 2018):
Change 6.8.4 [basic.compound] bullet 4.3 as follows:
Two objects a and b are pointer-interconvertible if:
...
one is a standard-layout class object and the other is the first non-static data member of that object, or, if the object has no non-static data members,
the firstany base class subobject of that object (11.4 [class.mem]), or...
Change 11.4 [class.mem] paragraph 25 as follows:
If a standard-layout class object has any non-static data members, its address is the same as the address of its first non-static data member if that member is not a bit-field.Otherwise, itsIts address is also the same as the address of each of itsfirstbase class subobjects(if any). [Note: There might therefore be unnamed padding within a standard-layout struct object inserted by an implementation, but not at its beginning, as necessary to achieve appropriate alignment. —end note] [Note: The object and its first subobject are pointer-interconvertible (6.8.4 [basic.compound], 7.6.1.9 [expr.static.cast]). —end note]
Notes from the March, 2018 meeting:
It was pointed out that the definition of pointer interconvertibility in 6.7.5.3 [basic.stc.thread] paragraph 4 refers to “the first base class subobject” of the object and must also be updated to reflect the above proposed resolution.
Proposed resolution, February, 2018: [SUPERSEDED]
Change 11.4 [class.mem] paragraph 25 as follows:
If a standard-layout class object has any non-static data members, its address is the same as the address of its first non-static data member if that member is not a bit-field.Otherwise, itsIts address is also the same as the address of each of itsfirstbase class subobjects(if any). [Note: There might therefore be unnamed padding within a standard-layout struct object inserted by an implementation, but not at its beginning, as necessary to achieve appropriate alignment. —end note] [Note: The object and its first subobject are pointer-interconvertible (6.8.4 [basic.compound], 7.6.1.9 [expr.static.cast]). —end note]
[Accepted as a DR at the June, 2018 (Rapperswil) meeting.]
According to 11.4 [class.mem] paragraph 25,
If a standard-layout class object has any non-static data members, its address is the same as the address of its first non-static data member. Otherwise, its address is the same as the address of its first base class subobject (if any). [Note: There might therefore be unnamed padding within a standard-layout struct object, but not at its beginning, as necessary to achieve appropriate alignment. —end note] [Note: The object and its first subobject are pointer-interconvertible (6.8.4 [basic.compound], 7.6.1.9 [expr.static.cast]). —end note]
This wording does not consider the case when the first non-static data member is a bit-field, which cannot have its address taken.
History | |||
---|---|---|---|
Date | User | Action | Args |
2020-12-15 00:00:00 | admin | set | status: ready -> cd5 |
2018-04-11 00:00:00 | admin | set | messages: + msg6179 |
2018-04-11 00:00:00 | admin | set | messages: + msg6178 |
2018-04-11 00:00:00 | admin | set | status: tentatively ready -> ready |
2018-02-27 00:00:00 | admin | set | messages: + msg5865 |
2018-02-27 00:00:00 | admin | set | status: open -> tentatively ready |
2016-03-23 00:00:00 | admin | create |