Oops.
Obviously x and z should not have a common type at all.
So the third static assertion should not pass. (it currently fails for the wrong reason though).
Replace the test with this:
shared int* x;
immutable int* y;
const int* z;
static assert(is(typeof(1?x:y) == shared(const(int))*)); // fail
static assert(!is(typeof(1?x:y) == const(int)*)); // fail
static assert(!is(typeof(1?x:z))); // fail
shared int[] a;
immutable int[] b;
const int[] c;
static assert(is(typeof(1?a:b) == shared(const(int))[])); // pass (ok)
static assert(!is(typeof(1?a:b) == const(int)[])); // pass (ok)
static assert(!is(typeof(1?x:z))); // fail
All of these should pass.
Comment #2 by timon.gehr — 2011-11-12T11:54:47Z
...
static assert(!is(typeof(1?a:c))); // fail
Comment #3 by timon.gehr — 2011-11-12T12:02:03Z
inout is buggy too: inout and shared are combined to shared const.
inout(int[]) foo(inout int[] x, shared int[] y, inout int* a, shared int* b){
static assert(!is(typeof(1?x:y))); // fail
static assert(!is(typeof(1?a:b))); // fail
return x;
}
Both assertions should pass.