On 07/03/2017 04:01 PM, Jonathan M Davis via Digitalmars-d wrote:
Fortunately, it looks like your assertion that shared may stand for inout is
wrong, because this code fails to compile:

class C
{
}

inout(C) foo(inout(C) c)
{
     return c;
}

void main()
{
     shared a = new C;
     auto b = foo(a);
}

and gives the error

test.d(13): Error: function test.foo (inout(C) c) is not callable using
argument types (shared(C))


Thanks, Jonathan. You're absolutely right. Checking the spec, it even says: "Note: Shared types are not overlooked. Shared types cannot be matched with inout." [1]

I think I've only tested with something like `foo(new shared C)`. That is accepted, but not because of inout. The compiler sees that the argument is unique and can't actually be shared with another thread yet, so it strips shared off.

Sorry for the noise. Nothing to see here.


[1] https://dlang.org/spec/function.html#inout-functions

Reply via email to