Comment #0 by destructionator — 2014-03-03T12:04:17Z
class Foo {
int add(int a)
in { assert(a > 0); }
body { return a + 10; }
}
class Bar : Foo {
override int add(int a)
in { assert(a <= 0 || a > 0); }
body { return a + 10; }
}
void main() {
// contracts.d(4): Error: variable a cannot be read at compile time
//enum a = new Bar().add(-5); // error
enum b = new Foo().add(5); // works
}
Since both of them are int literals, it seems like it should work in CTFE, and it indeed does with a simple case, but once inheritance gets involved, the contract seems to get confused.