Function Subspace :: sus :: mem :: take
Moves from t and constructs a new T in its place. Returns the old value
of t.
Requires that the type is final because calling take() on a base class
could lead to Undefined Behaviour if the now-reconstructed object is
accessed without std::launder thereafter, as replacing a subclass with the
base class would change the underlying storage.