I am using ranges (wrapped in InputRangeObject for use in interfaces) of shared objects, with new beta some cases are broken:
```
import std.range;

class A {}

InputRange!(shared A) foo()
{
        return [new A].inputRangeObject;
}

void bar()
{
        auto res = foo.array;
}

void main() {}
```
Fails with:
```
source/app.d(7): Error: cannot implicitly convert expression (inputRangeObject([new A])) of type std.range.InputRangeObject!(A[]).InputRangeObject to std.range.InputRange!(shared(A)).InputRange /usr/include/dmd/phobos/std/conv.d(3914): Error: cannot implicitly convert expression (arg) of type shared(A) to app.A /usr/include/dmd/phobos/std/array.d(2476): Error: template instance std.conv.emplaceRef!(shared(A)).emplaceRef!(shared(A)) error instantiating /usr/include/dmd/phobos/std/array.d(64): instantiated from here: put!(shared(A)) source/app.d(12): instantiated from here: array!(InputRange!(shared(A)))
```

And also AA starts behave strange in shared context:
```
shared string[][string] map;

void main()
{
        map.rehash;
}
```
My AA is stored in shared class, the shared is inferred implicitly. Also following workaround works:
```
void main()
{
        (cast(shared(string[])[string])map).rehash;
}
```

Is this behavior a bug, or it works as expected?

Reply via email to