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™?
