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