[dmd 2.066-b1] std.range.array with shared objects and AA rehash

NCrashed via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jul 8 07:08:52 PDT 2014


On Tuesday, 8 July 2014 at 13:07:57 UTC, Meta wrote:
> On Tuesday, 8 July 2014 at 12:42:44 UTC, NCrashed wrote:
>> Oops, I forgot shared at new. But the major issue is that 
>> doesn't fix the problem:
>> ```
>> import std.range;
>>
>> class A {}
>>
>> InputRange!(shared A) foo()
>> {
>> 	return [new shared A].inputRangeObject;
>> }
>>
>> void bar()
>> {
>> 	auto res = foo.array;
>> }
>>
>> void main() {}
>> ```
>> Output:
>> ```
>> /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)))
>> ```
>
> Hmmm, it worked when I compiled it on Dpaste, so you must be 
> using a different compiler. There were some changes to shared 
> in the current 2.066 beta, so that may be the cause. Somebody 
> more experienced with shared than me will have to answer.

I appreciate you help, the error smells like a bug. That compiles 
on dmd 2.065, but I am testing new dmd 2.066-b1 to not suddenly 
get dozens of such errors when it becomes a release.


More information about the Digitalmars-d-learn mailing list