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