__rvalue and Move Semantics first draft
kinke
noone at nowhere.com
Sat Nov 9 17:37:48 UTC 2024
Oh, there's at least one problem with the `this(T)` move-ctor
signature - C++ interop. C++ doesn't destroy the parameter,
because it's an rvalue-ref. The proposed by-value signature in D
however includes the destruction of the value-parameter as part
of the move-construction. The same applies to move-assignment via
`opAssign(T)`. So after calling a C++ move ctor/assignOp with an
`__rvalue(x)` argument, the rvalue wasn't destructed, and its
state is as the C++ callee left it. Automatically reset-blitting
to `T.init` would be invalid in that case, as the moved-from
lvalue might still have stuff to destruct.
More information about the dip.development
mailing list