On Wednesday, 22 October 2014 at 16:55:41 UTC, Regan Heath wrote:
"The garbage collector is not guaranteed to run the destructor
for all unreferenced objects. Furthermore, the order in which
the garbage collector calls destructors for unreference objects
is not specified. This means that when the garbage collector
calls a destructor for an object of a class that has members
that are references to garbage collected objects, those
references may no longer be valid. This means that destructors
cannot reference sub objects. This rule does not apply to auto
objects or objects deleted with the DeleteExpression, as the
destructor is not being run by the garbage collector, meaning
all references are valid."
But Scoped!A is on the stack?
So why wasn't the eles' destructor order in reverse if Scoped is
a struct and calls explicit destroy(B) then destroy(A)?
https://github.com/D-Programming-Language/phobos/blob/master/std/typecons.d#L4628
~this()
{
.destroy(Scoped_payload);
}