This issue is nearly identical to Issue 4692 with a minor amount of added depth. The test case below breaks 1.064 (but not 2.049):
module breaker;
import breaker;
void main() {}
static if (is(ElemType!(int))){}
template ElemType(T) {
alias _ElemType!(T).type ElemType;
}
template _ElemType(T) {
alias r type;
}
As before, this was distilled from the same multi-module cyclic import. Also as before, commenting out the cyclic import causes the code to compile as expected. This code works properly in 1.060.
Comment #1 by nyphbl8d — 2010-10-08T12:24:22Z
This regression is directly related to changeset 632 and 477 just as Issue 4302 was, but I'm not sure what conditions should be applied to ensure the code takes effect only in the correct circumstances (forcing the if expression to evaluate to false resovles the bug).
Comment #2 by nyphbl8d — 2010-12-21T07:13:13Z
This is still broken in the latest 1.066 DMD. It also still compiles correctly in 2.051 DMD.
Comment #3 by ibuclaw — 2010-12-22T13:25:29Z
Created attachment 853
Patch for 5015
Spotted the difference between D1 and D2 related to this bug report. This can be seen in changeset 447, and a quick comparison using Meld confirms this:
Attaching patch (merged from D2) which fixes this issue.
Regards
Comment #4 by ibuclaw — 2010-12-22T13:28:39Z
(In reply to comment #3)
> Created an attachment (id=853) [details]
> Patch for 5015
>
> Spotted the difference between D1 and D2 related to this bug report. This can
> be seen in changeset 447, and a quick comparison using Meld confirms this:
Derp, I meant changeset **477**