This is an unofficial snapshot of the ISO/IEC JTC1 SC22 WG21 Core Issues List revision 110b. See http://www.open-std.org/jtc1/sc22/wg21/ for the official list.

2023-01-15


1017. Member access transformation in unevaluated operands

Section: 11.4.3  [class.mfct.non.static]     Status: C++11     Submitter: Johannes Schaub     Date: 2009-12-30

[Voted into the WP at the March, 2011 meeting as part of paper N3282.]

The following innocuous-appearing code is currently ill-formed:

    struct A {
        int a;
    };

    struct B {
        void f() {
            decltype(A::a) i;    // ill-formed
        }
    };

The reason is that, according to 11.4.3 [class.mfct.non.static] paragraph 3, the reference to A::a is transformed into (*this).A::a, and there is no A subobject of B. It would seem reasonable to suppress this transformation in unevaluated operands, where a reference to a non-static member is permitted without an object expression.

(See also issue 1005.)

Notes from the November, 2010 meeting:

The CWG agreed that the resolution of issue 515 was ill-advised and should be reversed.