https://d.puremagic.com/issues/show_bug.cgi?id=12000
Kenji Hara <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|DMD |Phobos Depends on| |12008 Severity|regression |normal --- Comment #4 from Kenji Hara <[email protected]> 2014-01-27 01:27:41 PST --- (In reply to comment #1) > Eliminating the dependency on Phobos: [snip] I separated compiler regression into issue 12008. (In reply to comment #0) > Consider: > > import std.typecons; > > struct GroupBy(R) > { > struct SharedInput > { > Group unused; > } > > struct Group > { > private RefCounted!SharedInput _allGroups; > } > } > > unittest > { > GroupBy!(int[]) g1; > } > > This came about while I was working on #5968. The intent here is to have each > group have a backreference to the mother hen of all groups. However, the code > does not compile due to protests about forward reference issues (specifically > not knowing the size). It should, seeing as RefCounted is just a pointer so > the > size is not needed to define Group's layout. The root cause is in the implementation of RefCounted. import std.traits : hasIndirections; struct RefCounted(T) { ~this() { static if (hasIndirections!T) { /* ... */ } } } hasIndirections!T requires the full representation of T to calculate result. Therefore, contrary to the Andrei's thought, current RefCounted does not become just a pointer to T. To fix the issue, following fix would be necessary. struct RefCounted(T) { ~this() { static if (!__traits(compiles, hasIndirections!T) || hasIndirections!T) { /* ... */ } } } It means that, if hasIndirections!T fails, assume T has forward reference to RefCounted!T. -- Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
