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.