On Wed, 27 Oct 2021 at 19:57, <language.lawyer@gmail.com> wrote:
On 27/10/2021 14:44, Yongwei Wu via Std-Discussion wrote:
> When looking up the exact wording of aliasing rules in C++, I am surprised
> to find that much content seems to be gone in the C++20 (draft, N4860)
> under 7.2.1 p11. Specifically, there is no mention of the validity of
> aliasing with "a type that is a (possibly cv-qualified) base class type of
> the dynamic type of the object", which existed in earlier C++ standards.
> Also the online link: https://eel.is/c++draft/basic.lval#11
> I do not think the standard has changed the rule, so I must have missed
> something. Can anyone point to me how to read the rules, maybe pointing me
> to a discussion of the wording change?


TL;DR the removed rules have never been applicable.

Thanks for the info. But the issue is not completely resolved for me.


struct A { … };
struct B : A { … };
A* pA = new B{…};

Is using pA->… to access the base-class fields undefined behaviour?

Interpreting the rules literally, it seems to be the case … but that seems very surprising to me.

Yongwei Wu
URL: http://wyw.dcweb.cn/