https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99613

--- Comment #14 from Michal Zientkiewicz <michalz at nvidia dot com> ---
https://eel.is/c++draft/basic.start.term#3

If the completion of the constructor or dynamic initialization of an object
with static storage duration strongly happens before that of another, the
completion of the destructor of the second is sequenced before the initiation
of the destructor of the first.
If the completion of the constructor or dynamic initialization of an object
with thread storage duration is sequenced before that of another, the
completion of the destructor of the second is sequenced before the initiation
of the destructor of the first.
If an object is initialized statically, the object is destroyed in the same
order as if the object was dynamically initialized.
For an object of array or class type, all subobjects of that object are
destroyed before any block variable with static storage duration initialized
during the construction of the subobjects is destroyed.
If the destruction of an object with static or thread storage duration exits
via an exception, the function std​::​terminate is called ([except.terminate]).

I think that makes at least the dependent variable case a requirement.

Reply via email to