On Monday, 1 October 2018 at 02:29:40 UTC, Manu wrote:
So, I know that there's not a bunch of threads banging on this
object... but the shared method should still work! A method that
handles thread-safety doesn't suddenly not work when it's only
accessed from a single thread.

Shared data may need different algorithms. If unshared data is implicitly convertible to shared, you start to conflate shared data with unshared, so you're back to C-style sharing.

This is how you can do it:

shared struct SharedBob
{
    this(int){}
    void setThing(){}
}
alias shared SharedBob Bob;

void f(ref shared Bob a, ref Bob b)
{
  a.setThing(); // I have a shared object, can call shared method

  b.setThing(); // ok
}

int main()
{
    auto b=Bob(0);
    Bob c;
    f(b,c);
    return 0;
}

Reply via email to