On 01/19/2014 01:03 PM, Michel Fortin wrote:
Actually, 'A?' would implicitly convert to 'A' where the compiler can prove control flow prevents its value from being null.
I think the type should be upgraded. i.e.:
So you can dereference it in a branch that checked for null: class A { int i; void foo(); } void bar(A a); // non-nullable parameter void test(A? a, A? a2) { a.i++; // error, 'a' might be null a.foo(); // error, 'a' might be null bar(a); // error, 'a' might be null if (a) {
static assert(is(typeof(a)==A));
a.i++; // valid [...] a.foo(); // valid [...] bar(a); // valid [...] } }