Can passing an address of this to a non-copyable object be made trusted? - i.e. can I disable moving?

Nicholas Wilson iamthewilsonator at hotmail.com
Sun Aug 26 23:10:29 UTC 2018


On Sunday, 26 August 2018 at 20:17:30 UTC, aliak wrote:
>
> So if we had this:
>
> struct A(T) {
>   auto proxy() @trusted {
>     return B!T(&this);
>   }
> }
>
> struct B(T) {
>   private A!T* source;
>   private this(A!T* s) { source = s; }
>   @disable this();
>   @disable this(this) {}
>   @disable void opAssign(B!T);
> }
>
> In order for f to be "safe" I need to ensure that B!T(&this) 
> does not escape the scope of A!T. I figured disable 
> construction and copying may work, but it seems you can still 
> get it moved:
>
> void main() @safe {
>   auto f() {
>     auto a = A!int();
>     return a.proxy;
>   }
>   auto escaped = f; // escaped.source is gone...
> }
>
> Anyway around this?
>
> Cheers,
> - Ali

Not sure abut the current language but DIP1014 
https://github.com/dlang/DIPs/blob/master/DIPs/DIP1014.md#final-review

"The point was made that allowing opPostMove to be overidden 
raises the question of what to do when it is annotated with 
@disable. The concensus was that, in such a case, an actual 
attempt to move the object would result in a compilation error."

So, soon™?


More information about the Digitalmars-d-learn mailing list