On Tuesday, 28 June 2022 at 21:40:44 UTC, Loara wrote:
When `connect()` returns may happen that `b` is destroyed but `a` not, so `a.next` contains a dangling pointer that
Not when connect returns, but the scope that connect was called from. Still, this can be deduced, you just have to give the scopes an ordering.
not-scoped variable (`a.next` is not `scope` since this attribute is not transitive)
Well, that is a flaw, if the object is stack allocated then the fields are too.
is clearly dangerous since `connect` doesn't know which between `a` and `b` terminates first.
The compiler could easily deduce it. It is not difficult to see what the life time constraint must be.