https://issues.dlang.org/show_bug.cgi?id=23140
Ruby The Roobster <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #1 from Ruby The Roobster <[email protected]> --- (In reply to Steven Schveighoffer from comment #0) > I'm not sure it should have ever worked, but I'm also wondering why this > cannot be made to work. > > Prior to 2.099.0, the following code compiled: > > ```d > import std.container : Array; > shared class C {} > > Array!C arr; > ``` > > But it no longer does. The reason is because of the fix for > https://issues.dlang.org/show_bug.cgi?id=22515. Now, a C is actually typed > as `shared(C)`, and it does not implicitly cast to `const void *` (used by > GC functions and pureFree, etc.). > I'm currently working on a fix, and I've noticed the following: While creating an Unshared template (https://forum.dlang.org/post/[email protected]), and doing the following solved most of the problems: ```d //... struct Array(W) //Changed from struct Array(T) if (!is(immutable W == immutable bool)) //Change 'T' to 'W' { alias T = Unshared!W; //Fix https://issues.dlang.org/show_bug.cgi?id=23140 //... ``` This doesn't fix the constructor for Array. I still get the following error message: ``` E:\Programs\D\dmd2\windows\bin\..\..\src\phobos\std\container\array.d(650): Error: none of the overloads of template `std.container.array.Array!(shared(C)).Array.__ctor` are callable using argument types `!()(C[])` E:\Programs\D\dmd2\windows\bin\..\..\src\phobos\std\container\array.d(575): Candidates are: `__ctor(U)(U[] values...)` E:\Programs\D\dmd2\windows\bin\..\..\src\phobos\std\container\array.d(605): `__ctor(Range)(Range r)` with `Range = C[]` must satisfy the following constraint: ` !is(Range == T[])` ``` > Three options here: > > 1. Fix Array to cast away the shared when using these functions (a > reasonable assumption) > 2. Fix the druntime functions so they also accept `shared` pointers > 3. close this bug as wontfix, and I'll have to work around it in the project > I'm trying to compile (libasync) --
