__rvalue and Move Semantics first draft

kinke noone at nowhere.com
Mon Nov 11 11:04:19 UTC 2024


On Saturday, 9 November 2024 at 22:39:33 UTC, Walter Bright wrote:
> I suggest the most pragmatic implementation of your ideas is to 
> append to the destructor calls to rvalue parameters a blit of 
> the .init value. It is only necessary if the rvalue has a 
> destructor. The callee cannot know if an rvalue was passed 
> using __rvalue, so it has to defensively do this anyway.

I'm not too fond of that, as that means doing the blit for every 
value parameter with a dtor, not just in the (presumably *way* 
less) call sites using `__rvalue`. Adding a cleanup-scope 
(`finally`) for the call shouldn't be too hard, reset-blitting 
all arguments that were __rvalue'd. Incl. PODs and non-PODs 
without dtor, to get the `T.init`-state guarantee in all cases, 
required to make this feature half-way safe in cases where the 
compiler cannot prove that the original lvalue isn't accessed 
later.


More information about the dip.development mailing list