On Friday, 21 November 2014 at 07:40:31 UTC, Daniel Murphy wrote:
It doesn't print anything for me. This code seems to have the desired effect:

shared const int i;

void main()
{
   static if (is(typeof(i) : shared(U), U))
   {
        //Prints "const(int)"
        pragma(msg, U);
   }
}

Now how about this one:

alias Unshared(T: shared U, U) = U;
pragma(msg, Unshared!(shared const int)); //Prints const(int)

Does the `:` denote subtyping as well, or equality? I'm sure that in this case it's the latter, which makes me more strongly suspect that
`is(T == shared U, U)` not working is a bug.


Furthermore, I'm starting to get very confused:

enum sameTypes(T, U) = is(T: U) && is(U: T);

assert(sameTypes!(const int, immutable int)); //Ok, wtf?
assert(sameTypes!(int, immutable int); //Ok, wtf?

What in the world is going on here? Note that this is from Dpaste, so it's DMD 2.065, but I doubt there is that much difference between 2.065 and 2.066.

Reply via email to