[Issue 20665] New: std.concurrency.spawn should document not working with delegates

d-bugmail at puremagic.com d-bugmail at puremagic.com
Wed Mar 11 08:28:57 UTC 2020


https://issues.dlang.org/show_bug.cgi?id=20665

          Issue ID: 20665
           Summary: std.concurrency.spawn should document not working with
                    delegates
           Product: D
           Version: D2
          Hardware: x86
                OS: Windows
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: simen.kjaras at gmail.com

std.concurrency.spawn only accepts function pointers and callable types without
mutable aliasing as its first argument. A logical thing for a user to attempt
is to use a delegate, like e.g. this:

struct S {
    void fun() {}
    void gun() {
        import std.concurrency;
        spawn(&fun); // Won't compile
    }
}

This will not compile, with a somewhat confusing error message about "cannot
deduce function from argument types". There should be an overload like this:

void spawn(F, T...)(F fn, T args)
if (isDelegate!F)
{
    static assert(false, "Delegates can hold aliases to mutable state.");
}

In addition, the documentation should mention that this is a limitation, and
why (delegate contexts have no constness, and so may alias mutable state).

--


More information about the Digitalmars-d-bugs mailing list