<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Syntax for `T == P || T: P` is off-topic for current proposal, which is just about replacing `P` with `Any&lt;P&gt;`.<br></div><div><br></div><div>Currently, equivalent of `Any&lt;P&gt;` has no subtypes (besides itself). This is likely not going to be changed. So `where U : Any&lt;P&gt;` will not be allowed.</div><div><br></div><div>Generalized existentials also don&#39;t solve this problem. Existential `Sequence` would look like this:</div><div><br></div><div>`Any&lt;Sequence where Iterator.Element : P&gt;`</div><div><br></div><div>Here, we can&#39;t accept `Iterator.Element == Any&lt;P&gt;` for the same reason that we can&#39;t accept `Any&lt;P&gt; : P` in any other place: static member requirements are not implemented.</div><div><br></div><div>To solve this problem, we should invent another generic requirement, say `:==`, that prohibits calling static members on generic parameter. This should be a separate proposal. `Any&lt;P&gt;` can&#39;t help here, because the problem with calling static members only happens with static polymorphism.</div></div></div></div>