On 12/21/2011 09:15 PM, Elvis Maehren wrote:
This works fine at runtime, but explodes in CTFE:
---
bool isInstanceOf(T, O)(O o) {
return (cast(T) o) !is null;
}
---
CTFE doesn't like "!is null" ("cannot compare [...] at compile time").
This will be fixed in the next release:
http://d.puremagic.com/issues/show_bug.cgi?id=7143
Moreover, in CTFE a failed cast terminates the interpretation ("cannot
reinterpret class from [...] to [...] at compile time").
I don't think this is filed already. Maybe you want to file a bug report?
Is this somehow
catchable? If so, I could do something along these lines:
---
if(__ctfe) {
try {
auto t = cast(T) o;
return true;
} catch {
return false;
}
}
---
use traits(__compiles, {...}), where '...' is the exact code that fails.
But that is a mere workaround. What you are doing should/will work.