Hi everybody! I'm new to this forum so, please excuse me in advance for asking silly questions. I think I'm not the first person which wondering about this topic, but I'm trying to combine Unique type and concurrency module, getting the compiler error

struct std.typecons.Unique!(S).Unique is not copyable because it is annotated with @disable

My test code is taken from the examples of the D docu from this page:

void spawnedFunc2(Tid ownerTid)
{
        receive(
                (ref Unique!S ur)
                {
                        writeln("Recieved the number ", ur.i);
                }
        );
        send(ownerTid, true);
}

static struct S
{
    int i;
    this(int i){this.i = i;}
}

Unique!S produce()
{
    // Construct a unique instance of S on the heap
    Unique!S ut = new S(5);
    // Implicit transfer of ownership
    return ut;
}

void main()
{
    Unique!S u1;
    u1 = produce();
    auto childTid2 = spawn(&spawnedFunc2, thisTid);
    send(childTid2, u1);
    writeln("Successfully printed number.");
}

I'm aware of the fact, that my u1 struct can't be copied, but I don't intend to do so. As in the docu stated, I want to lend the struct to the other thread (by using ref), being sure, that any other thread can't access the struct during it is processed by the first one.
Is such a thing possible?
Thanks in advance.
Alex

Reply via email to