I am sorry but I do not see ay relation between the statement I provided from the C++ Standard and the following example and your explanation. The statement is entirely unclear.
 
For example consider the following program
 
#include <iostream>
struct A
{
    A() = default;
    
    A( const A *a )
    {
        a->f();
    }
    
    virtual void f() const
    {
        std::cout << "Hello!\n";
    }
};
int main() 
{
    A a1;
    A a2( &a1 );
    
    return 0;
}
 
Here the object a1 is a complete object. Does it mean that the program ill-formed?
 
 
 
You can meet me at http://cpp.forum24.ru/ or www.stackoverflow.com or http://ru.stackoverflow.com
 
 
Суббота, 28 августа 2021, 16:51 +03:00 от Jason McKesson via Std-Discussion <std-discussion@lists.isocpp.org>:
 
On Sat, Aug 28, 2021 at 6:11 AM Vladimir Grigoriev via Std-Discussion
<std-discussion@lists.isocpp.org> wrote:
>
> This phrase in the paragraph #4 of the section «Construction and destruction»
>
> «If the virtual function call uses an explicit class member access (7.6.1.4) and the object expression refers to the complete object of x or one of that object’s base class subobjects but not x or one of its base class subobjects, the behavior is undefined.»
>
> What is the difference between the complete object of x or one of that object’s base class subobjects and the x or one of its base class subobjects?

The term "complete object" is defined in [intro.object]. It is an
object which is not a subobject of another object.

`x` is the object being constructed, and it may be the subobject of
another object. Thus, the "complete object of x" is the complete
object in which `x` is a subobject, or just `x` if `x` is not a
subobject.

Basically, what the text is saying is that if you try to use explicit
member access to call a virtual function that goes *outside* of the
inheritance graph of `x`, you get UB.
--
Std-Discussion mailing list
Std-Discussion@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-discussion