You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The following code fails to print anything, although I believe it should be valid and should print `const(int)`.
shared const int i;
static if (is(typeof(i) == shared U, U))
{
pragma(msg, U);
}
void main()
{
}
The text was updated successfully, but these errors were encountered:
dlang-bugzilla (@CyberShadow) commented on 2017-07-02T01:52:30Z
No, because you use ==, which does exact matching. If you want to partially match the type (i.e. check if it's implicitly convertible to shared), use `:`, not `==`:
shared const int i;
static if (is(typeof(i) == shared U, U))
{
pragma(msg, U); // now prints const(int)
}
void main()
{
}
I'm assuming in your example you meant to use : instead of ==.
That aside, why shouldn't this work? I'm trying to destructure some type which matches the pattern `shared U`. `shared const(int)`*should* match that pattern. What I'm trying to express is `∃ U: shared U == shared const int`; it seems incorrect to me that that I should have to use the subtyping form of is.
dlang-bugzilla (@CyberShadow) commented on 2017-07-02T10:14:49Z
(In reply to monkeyworks12 from comment #2)
> I'm assuming in your example you meant to use : instead of ==.
Oops, yes.
> That aside, why shouldn't this work? I'm trying to destructure some type> which matches the pattern `shared U`. `shared const(int)`*should* match> that pattern. What I'm trying to express is `∃ U: shared U == shared const> int`; it seems incorrect to me that that I should have to use the subtyping> form of is.
OK, I see what you mean now. It looks like partial destructuring of type qualifiers was never implemented for == variants of IsExpression. It is the same for inout:
static assert(!is(shared const int == shared U, U)); // should work
static assert( is(shared const int : shared U, U));
static assert(!is(inout const int == const U, U)); // should work
static assert( is(inout const int : const U, U));
Meta reported this on 2014-11-22T22:55:26Z
Transferred from https://issues.dlang.org/show_bug.cgi?id=13767
CC List
Description
The text was updated successfully, but these errors were encountered: