On Wed, Jun 2, 2021 at 1:45 AM Marc Nieper-Wißkirchen <xxxxxx@nieper-wisskirchen.de> wrote:

Copy-transient, however, can make sense by choosing the right semantics. As I wrote in my earlier posts, a procedure taking a transient object and returning one can be of a lot of types:

An explicit diagonal operation (diag x) would take a transient object X and return two transient objects, both being independent copies of the then invalidated X.

If the underlying implementation is such that one copy is exactly the invalidated X, we don't need the second value and arrive at a procedure we could then call copy-transient.

Ah, right.  If we don't force "any procedure that takes transient struct invalidates it", then we can have meaningful copy-transient, that does not invalidate the input and returns an independent transient copy of the input.