Current draft standard says (previous standards have similar wording) in [basic.life/1]:
The lifetime of an object or reference is a runtime property of the object or reference. An object is said to have non-vacuous initialization if it is of a class or aggregate type and it or one of its subobjects is initialized by a constructor other than a trivial default constructor. [ Note: Initialization by a trivial copy/move constructor is non-vacuous initialization. — end note ] The lifetime of an object of type T begins when:
(1.1) storage with the proper alignment and size for type T is obtained, and
(1.2) if the object has non-vacuous initialization, its initialization is complete
Why is it important here, that the initialization is non-vacuous? In other words, why does the lifetime begin before initialization is complete, if the initialization is not non-vacuous? What problem does it solve?
What would be the consequences, if (1.2) would read as
(1.2) if the object has initialization, its initialization is complete
The term non-vacuous is only used here, it must have some reason.
Note, there was a similar previous question of mine here, but as that question is a little bit too broad (and even I accepted one of the answers), the responses there don't answer this current question.