I don't know if there are ways to solve this problem, I hope this isn't another situation like bug 3950. This is wrong D2 code. The template Foo has the type parameter T while inside it uses the parameter R: template Foo(T) { enum bool Foo = is(typeof(R.length)); } void main() { assert(Foo!(int[])); } The program compiles with no errors with dmd 2.043 and at run time produces: core.exception.AssertError@test2(5): Assertion failure But to help debugging, I'd like the compiler to point R as a undefined identifier (even with the 'did you mean...') at compile-time. Is this possible?
This is expected & documented behavior. Compilation failures inside "is" expressions cause the is expression result to be false. A lot of template code relies on this. If you want an error on R being undefined, use it somewhere else in addition to inside the "is" expression.