Bug 4137 – Undefined identifier error in is(typeof())

Status
RESOLVED
Resolution
INVALID
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86
OS
Windows
Creation time
2010-05-01T05:38:00Z
Last change time
2015-06-09T05:14:56Z
Keywords
diagnostic
Assigned to
nobody
Creator
bearophile_hugs

Comments

Comment #0 by bearophile_hugs — 2010-05-01T05:38:35Z
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?
Comment #1 by bugzilla — 2010-05-01T09:45:29Z
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.