Member subobjects and base-class casts
Section [expr.static.cast]
Aaron Ballman

Created on 2016-01-13.00:00:00 last changed 36 months ago


Date: 2017-01-15.00:00:00

Proposed resolution (January, 2017):

Change [expr.static.cast] paragraph 2 as follows:

...If the object of type “cv1 B” is actually a base class subobject of an object of type D, the result refers to the enclosing object of type D. Otherwise, the behavior is undefined. [Example:...
Date: 2017-02-15.00:00:00

[Adopted at the February/March, 2017 meeting.]

The current wording of [expr.static.cast] paragraph 2 appears to permit the following example:

  struct B {
    int i;

  struct D : B {
    int j;
    B b;

  int main() {
    D d;

    B &br = d.b;
    D &dr = static_cast<D&>(br);  // Okay?

Presumably such casts should only be supported if the operand object is a base class subobject, not a member subobject.

Date User Action Args
2018-02-27 00:00:00adminsetstatus: tentatively ready -> c++17
2017-02-06 00:00:00adminsetmessages: + msg5732
2016-01-13 00:00:00admincreate