August 11, 2013 std.concurrency.receive() question | ||||
---|---|---|---|---|
| ||||
i try to compile the following slightly modified sample from the book and it failed with the following messages ======= source ============ import std.stdio; import std.concurrency; void fileWriter() { // Write loop for (bool running = true; running; ) { receive( (immutable(ubyte)[] buffer) {}, (OwnerTerminated) { running = false; } ); } stderr.writeln("Normally terminated."); } void main() { } ====== error messages ======= /Users/ruslan/Source/dlang/dub-test/source/listener.d(11): Error: template std.concurrency.receive does not match any function template declaration. Candidates are: /usr/local/Cellar/dmd/2.063.2/libexec/src/phobos/std/concurrency.d(646): std.concurrency.receive(T...)(T ops) /Users/ruslan/Source/dlang/dub-test/source/listener.d(11): Error: template std.concurrency.receive(T...)(T ops) cannot deduce template function from argument types !()(void function(immutable(ubyte)[] buffer) pure nothrow @safe, void) ======================== what's wrong? if i replace OwnerTerminated with int or simply remove everything is ok. if i replace with my own struct Terminate - fail. any help would be appreciated. |
August 11, 2013 Re: std.concurrency.receive() question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ruslan Mullakhmetov | Hi Ruslan,
On Sunday, 11 August 2013 at 13:04:41 UTC, Ruslan Mullakhmetov wrote:
> (OwnerTerminated) { running = false; }
This is a template function literal taking an argument named "OwnerTerminated", not a function with an unnamed parameter of type OwnerTerminated. Quite a sublime trap, admittedly.
In the future you might want to post similar questions to the digitalmars.D.learn group instead.
Hope this helps,
David
|
Copyright © 1999-2021 by the D Language Foundation