[...]
I'm confused about what you are asking me to prove. If I understand correctly, my only evidence is that the standard currently makes those assertions.
[...] The actual problem nests, kinda like swiss cheese. Because, you can have this...```c++struct Foo{Bar bar;Baz baz;};static_assert(std::is_implicit_lifetime_type_v<Bar>);static_assert(std::is_implicit_lifetime_type_v<Baz>);static_assert(not std::is_implicit_lifetime_type_v<Foo>);```The only way that Foo will be an implicit lifetime type under the current definition is if both Bar and Baz have at least one trivial constructor IN COMMON.
A class S is an implicit-lifetime class if
- it is an aggregate whose destructor is not user-provided or
- it has at least one trivial eligible constructor and a trivial, non-deleted destructor.
Scalar types, implicit-lifetime class types, array types, and cv-qualified versions of these types are collectively called implicit-lifetime types.