<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="markdown-here-wrapper" data-md-url="" style="">
<p style="margin: 0px 0px 1.2em !important;">It seems an issue
with cast conversion? E.g. the following:</p>
<pre style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;font-size: 1em; line-height: 1.2em;margin: 1.2em 0px;"><code class="hljs language-java" style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;white-space: pre; overflow: auto; border-radius: 3px; border: 1px solid rgb(204, 204, 204); padding: 0.5em 0.7em; display: block !important;display: block; overflow-x: auto; padding: 0.5em; color: rgb(51, 51, 51); background: rgb(248, 248, 248) none repeat scroll 0% 0%; -moz-text-size-adjust: none;">Sub<?> ss = (Sub<?>)next;
</code></pre>
<p style="margin: 0px 0px 1.2em !important;">Also fails (with same
error). Now, there are two questions here:</p>
<ol style="margin: 1.2em 0px;padding-left: 2em;">
<li style="margin: 0.5em 0px;">should the cast be statically
rejected - this means asking whether <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">Sub<?></code>
and <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">Super<? super Box<?>></code>
are provably distinct parameterized types;</li>
<li style="margin: 0.5em 0px;">should the cast be allowed
without warnings - this means proving that there is only one
possible way to go from a <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">Super<? super Box<?>></code>
down to a <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">Sub<?></code>;</li>
</ol>
<p style="margin: 0px 0px 1.2em !important;">But, before I try to
reply any of this questions - can you please confirm me that
there is another error in this program - namely with <code style="font-size: 0.85em; font-family: Consolas, Inconsolata, Courier, monospace;margin: 0px 0.15em; padding: 0px 0.3em; white-space: pre-wrap; border: 1px solid rgb(234, 234, 234); background-color: rgb(248, 248, 248); border-radius: 3px; display: inline;">isSub(new Sub<>())</code>
(I seem to get an inference failure here for the diamond
expression).</p>
<p style="margin: 0px 0px 1.2em !important;">Maurizio</p>
<p style="margin: 0px 0px 1.2em !important;">On 16/03/2023 10:01,
Tagir Valeev wrote:</p>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div class="markdown-here-exclude">
<p></p>
<blockquote type="cite" cite="mid:CAE+3fjYVMjYVt2sBWw7jXjaAx0JMmVtoNO8CovH+4NT3Jn6X+Q@mail.gmail.com">
<div dir="ltr">Hello!
<div><br>
</div>
<div>We've stumbled with the following code sample:</div>
<div><br>
</div>
<div>class Test {<br>
public static boolean isSub(Super<? super
Box<?>> next) {<br>
return next instanceof Sub<?>;<br>
}<br>
<br>
static class Super<T> {}<br>
<br>
static class Sub<T> extends
Super<Box<T>> { }<br>
<br>
static class Box<T> {}<br>
<br>
public static void main(String[] args) {<br>
System.out.println(isSub(new Sub<>()));<br>
}<br>
}<br>
</div>
<div><br>
</div>
<div>javac 21-ea+12-971 reports an error here:</div>
<div><br>
</div>
<div>Test.java:3: error: incompatible types:
Super<CAP#1> cannot be converted to Sub<?><br>
return next instanceof Sub<?>;<br>
^<br>
where CAP#1 is a fresh type-variable:<br>
CAP#1 extends Object super: Box<?> from capture
of ? super Box<?><br>
1 error<br>
</div>
<div><br>
</div>
<div>On the other hand, Eclipse compiler compiles this
correctly. From my understanding of the specification,
this code should be accepted. Could you please take a
look?</div>
<div><br>
</div>
<div>Thank you in advance,</div>
<div>Tagir Valeev.</div>
</div>
</blockquote>
<p></p>
</div>
<p style="margin: 0px 0px 1.2em !important;"></p>
<div title="MDH:PHA+SXQgc2VlbXMgYW4gaXNzdWUgd2l0aCBjYXN0IGNvbnZlcnNpb24/IEUuZy4gdGhlIGZvbGxvd2luZzo8YnI+PGJyPmBgYGphdmE8YnI+U3ViJmx0Oz8mZ3Q7IHNzID0gKFN1YiZsdDs/Jmd0Oylu
ZXh0Ozxicj5gYGA8YnI+PC9wPjxwPkFsc28gZmFpbHMgKHdpdGggc2FtZSBlcnJvcikuIE5vdywg
dGhlcmUgYXJlIHR3byBxdWVzdGlvbnMgaGVyZTo8L3A+PHA+MS4gc2hvdWxkIHRoZSBjYXN0IGJl
IHN0YXRpY2FsbHkgcmVqZWN0ZWQgLSB0aGlzIG1lYW5zIGFza2luZyB3aGV0aGVyIGBTdWImbHQ7
PyZndDtgIGFuZCBgU3VwZXImbHQ7PyBzdXBlciBCb3gmbHQ7PyZndDsmZ3Q7YCBhcmUgcHJvdmFi
bHkgZGlzdGluY3QgcGFyYW1ldGVyaXplZCB0eXBlczs8YnI+Mi4gc2hvdWxkIHRoZSBjYXN0IGJl
IGFsbG93ZWQgd2l0aG91dCB3YXJuaW5ncyAtIHRoaXMgbWVhbnMgcHJvdmluZyB0aGF0IHRoZXJl
IGlzIG9ubHkgb25lIHBvc3NpYmxlIHdheSB0byBnbyBmcm9tIGEgYFN1cGVyJmx0Oz8gc3VwZXIg
Qm94Jmx0Oz8mZ3Q7Jmd0O2AgZG93biB0byBhIGBTdWImbHQ7PyZndDtgOzwvcD48cD5CdXQsIGJl
Zm9yZSBJIHRyeSB0byByZXBseSBhbnkgb2YgdGhpcyBxdWVzdGlvbnMgLSBjYW4geW91IHBsZWFz
ZSBjb25maXJtIG1lIHRoYXQgdGhlcmUgaXMgYW5vdGhlciBlcnJvciBpbiB0aGlzIHByb2dyYW0g
LSBuYW1lbHkgd2l0aCBgaXNTdWIobmV3IFN1YiZsdDsmZ3Q7KCkpYCAoSSBzZWVtIHRvIGdldCBh
biBpbmZlcmVuY2UgZmFpbHVyZSBoZXJlIGZvciB0aGUgZGlhbW9uZCBleHByZXNzaW9uKS48L3A+
PHA+TWF1cml6aW88YnI+PC9wPk9uIDE2LzAzLzIwMjMgMTA6MDEsIFRhZ2lyIFZhbGVldiB3cm90
ZTo8YnI+PGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOkNBRSszZmpZVk1qWVZ0MnNC
V3c3alhqYUF4MEpNbVZ0b05POENvdkgrNE5UM0puNlgrUUBtYWlsLmdtYWlsLmNvbSI+PG1ldGEg
aHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7ICI+PGRpdiBkaXI9
Imx0ciI+SGVsbG8hPGRpdj48YnI+PC9kaXY+PGRpdj5XZSd2ZSBzdHVtYmxlZCB3aXRoIHRoZSBm
b2xsb3dpbmcgY29kZSBzYW1wbGU6PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5jbGFzcyBUZXN0
IHs8YnI+Jm5ic3A7ICZuYnNwOyBwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNTdWIoU3VwZXImbHQ7
PyBzdXBlciBCb3gmbHQ7PyZndDsmZ3Q7IG5leHQpIHs8YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7IHJldHVybiBuZXh0IGluc3RhbmNlb2YgU3ViJmx0Oz8mZ3Q7Ozxicj4mbmJzcDsgJm5i
c3A7IH08YnI+PGJyPiZuYnNwOyAmbmJzcDsgc3RhdGljIGNsYXNzIFN1cGVyJmx0O1QmZ3Q7IHt9
PGJyPjxicj4mbmJzcDsgJm5ic3A7IHN0YXRpYyBjbGFzcyBTdWImbHQ7VCZndDsgZXh0ZW5kcyBT
dXBlciZsdDtCb3gmbHQ7VCZndDsmZ3Q7IHsgfTxicj48YnI+Jm5ic3A7ICZuYnNwOyBzdGF0aWMg
Y2xhc3MgQm94Jmx0O1QmZ3Q7IHt9PGJyPiZuYnNwOyAmbmJzcDsgPGJyPiZuYnNwOyAmbmJzcDsg
cHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgezxicj4JCVN5c3RlbS5vdXQu
cHJpbnRsbihpc1N1YihuZXcgU3ViJmx0OyZndDsoKSkpOzxicj4JfTxicj59PGJyPjwvZGl2Pjxk
aXY+PGJyPjwvZGl2PjxkaXY+amF2YWMgMjEtZWErMTItOTcxIHJlcG9ydHMgYW4gZXJyb3IgaGVy
ZTo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRlc3QuamF2YTozOiBlcnJvcjogaW5jb21wYXRp
YmxlIHR5cGVzOiBTdXBlciZsdDtDQVAjMSZndDsgY2Fubm90IGJlIGNvbnZlcnRlZCB0byBTdWIm
bHQ7PyZndDs8YnI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHJldHVybiBuZXh0IGluc3Rh
bmNlb2YgU3ViJmx0Oz8mZ3Q7Ozxicj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7Xjxicj4mbmJzcDsgd2hlcmUgQ0FQIzEgaXMgYSBmcmVzaCB0
eXBlLXZhcmlhYmxlOjxicj4mbmJzcDsgJm5ic3A7IENBUCMxIGV4dGVuZHMgT2JqZWN0IHN1cGVy
OiBCb3gmbHQ7PyZndDsgZnJvbSBjYXB0dXJlIG9mID8gc3VwZXIgQm94Jmx0Oz8mZ3Q7PGJyPjEg
ZXJyb3I8YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5PbiB0aGUgb3RoZXIgaGFuZCwgRWNs
aXBzZSBjb21waWxlciBjb21waWxlcyB0aGlzIGNvcnJlY3RseS4gRnJvbSBteSB1bmRlcnN0YW5k
aW5nIG9mIHRoZSBzcGVjaWZpY2F0aW9uLCB0aGlzIGNvZGUgc2hvdWxkIGJlIGFjY2VwdGVkLiBD
b3VsZCB5b3UgcGxlYXNlIHRha2UgYSBsb29rPzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhh
bmsgeW91IGluIGFkdmFuY2UsPC9kaXY+PGRpdj5UYWdpciBWYWxlZXYuPC9kaXY+PC9kaXY+Cgo8
L2Jsb2NrcXVvdGU+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0;"></div>
</div>
</body>
</html>