<div dir="ltr">Hello, Maurizio!<div><br></div><div>Thank you for the quick response.</div><div><br></div><div>I added the main() method just to check whether the resulting program is actually compilable and runnable by Eclipse compiler (and it is). If there's another problem there, then probably it requires separate investigation, so let's put it aside for now. For this particular issue, let's replace the main method with</div><div><br></div><div>System.out.println(isSub(null));<br></div><div><br></div><div>With best regards,</div><div>Tagir Valeev.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Mar 16, 2023 at 11:21 AM Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com">maurizio.cimadamore@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<div>
<p style="margin:0px 0px 1.2em">It seems an issue
with cast conversion? E.g. the following:</p>
<pre style="font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;white-space:pre-wrap;overflow:auto;border-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em;color:rgb(51,51,51);background:none 0% 0% repeat scroll rgb(248,248,248);display:block">Sub<?> ss = (Sub<?>)next;
</code></pre>
<p style="margin:0px 0px 1.2em">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">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">Maurizio</p>
<p style="margin:0px 0px 1.2em">On 16/03/2023 10:01,
Tagir Valeev wrote:</p>
<p style="margin:0px 0px 1.2em"></p>
<div>
<p></p>
<blockquote type="cite">
<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"></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:0px;width:0px;max-height:0px;max-width:0px;overflow:hidden;font-size:0em;padding:0px;margin:0px"></div>
</div>
</div>
</blockquote></div>