Struct should be invalid after move

Stanislav Blinov stanislav.blinov at gmail.com
Tue Nov 27 09:03:19 UTC 2018


On Tuesday, 27 November 2018 at 08:37:32 UTC, Nicholas Wilson 
wrote:
> On Tuesday, 27 November 2018 at 08:00:22 UTC, Sebastiaan Koppe 
> wrote:
>> I have a non-copyable struct and I really want a compiler 
>> error whenever I access it after it has been moved.
>>
>> ---
>> struct Handle {
>>     ...
>>     @disable this(this);
>>     ...
>> }
>>
>> void main() {
>>     import std.algorithm : move;
>>     auto handle = getOne();
>>     auto second = handle.move;  /// line 14
>>     auto third = handle.move;    ///  <- compiler error, 
>> variable handle is invalid after line 14
>> }
>> ---
>>
>> I believe this would prevent some nasty bugs when dealing with 
>> these structs.
>>
>> What do you think?
>
> we need an `@invalidate`s attribute for that, would apply to 
> pointers passed to free etc. Probably would need a DIP though. 
> I like it.

Yeah, that could be an awesome addition. However, it's not as 
simple, because this should be legal too:

```
auto handle = getOne();
auto second = handle.move; // `handle` becomes invalid
// ...
handle = getOne(); // `handle` is valid again
```


More information about the Digitalmars-d mailing list