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.