On 3/30/16 8:01 PM, Ali Çehreli wrote:
As expected, the following trivial case works:

void main() {
     auto func = delegate(int i) {};  // expects int

     func(const(int)(42));            // passes const(int)
}


The following concurrency program fails at runtime:

import core.thread;
import std.concurrency;

void foo() {
     receiveOnly!int();            // expects int
}

void main() {
     auto worker = spawn(&foo);

     // Sends const(int)
     worker.send(const(int)(42));  // sends const(int)

     thread_joinAll;
}

std.concurrency.MessageMismatch@std/concurrency.d(224): Unexpected
message type: expected 'int', got 'const(int)'


Feature or bug? (receive() is worse because as it simply ignores the
message.)

Bug, but probably of the enhancement variety I think (I don't think this is a small project). Receive should canonicalize the input and requested receive type. That is, receiveOnly!(const(int)) should really call receiveOnly!int, and send!(const(int)) should really call send!int.

Generous usage of Unqual should be done here.

-Steve

Reply via email to