On Friday, 16 August 2019 at 13:51:49 UTC, Jonathan M Davis wrote:
It is not possible to prevent moving in D as things currently
stand. DIP 1014 will need to be implemented to either hook into
moves or to prevent them. However, once DIP 1014 has been
implemented, I would expect the result to be that what you're
trying to do here simply wouldn't work if you disallowed
moving, since DIP 1014 doesn't affect when the compiler does a
move. It just allows you to hook into when a move takes place
so that you can do stuff like adjust pointers, and presumably,
if you @disable the function that hooks into the move, moving
will then be disabled (though IIRC, that's not explicitly
called out in DIP 1014; it's just what would naturally fall out
from how @disable works).
- Jonathan M Davis
Thanks for the very helpful explain, I will try find some work
around to fix this.
One more question: If the struct has "@disable this() ;@disable
this(this) ;", and the instance is stored into other struct
member or local|global vars, it will never moved again?