<div dir="ltr"><div class="markdown-here-wrapper" style=""><p style="margin:0px 0px 1.2em!important">Hi,</p>
<p style="margin:0px 0px 1.2em!important">compExpr::operator() is broken - it can return true both for compExpr()(e0, e1) and compExpr()(e1, e0) if </p>
<ol style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">e0 -> sign  () < e1 -> sign  () and</li>
<li style="margin:0.5em 0px">(e0 -> Image () != NULL) && (e1 -> Image () != NULL) and</li>
<li style="margin:0.5em 0px">e1 -> Image () -> compare (*(e0 -> Image ())) < 0</li>
</ol>
<p style="margin:0px 0px 1.2em!important">and in some other cases.</p>
<p style="margin:0px 0px 1.2em!important">This is easy to check by adding an assert</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-c++" 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);border-radius:3px;display:inline;background-color:rgb(248,248,248);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)"><span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">struct</span> compExpr {
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">inline</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">bool</span> compare (exprAux* e0, exprAux* e1) <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">const</span>
    {
      <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> ((e0 -> sign  () < e1 -> sign  ()) ||
              ((e0 -> Image () != NULL) && (e1 -> Image () != NULL) && (e0 -> Image () -> compare (*(e1 -> Image ())) < <span class="hljs-number" style="color:rgb(0,128,128)">0</span>)));
    }
  <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">inline</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">bool</span> <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">operator</span> () (exprAux* e0, exprAux* e1) <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">const</span>
  {
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">bool</span> result = compare(e0, e1);
    assert(!result || result != compare(e1, e0));
    <span class="hljs-keyword" style="color:rgb(51,51,51);font-weight:bold">return</span> result;
  }
};
</code></pre>
<p style="margin:0px 0px 1.2em!important">and running “counne <a href="http://toy.nl">toy.nl</a>” where <a href="http://toy.nl">toy.nl</a> is a test NL file from Couenne/test/data.</p>
<p style="margin:0px 0px 1.2em!important">The attached patch fixes the issue.</p>
<p style="margin:0px 0px 1.2em!important">Best regards,<br>Victor</p>
<div title="MDH:PGRpdj5IaSw8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoZSBjb21wRXhwcjo6b3BlcmF0b3Io
KSBpcyBicm9rZW4gLSBpdCBjYW4gcmV0dXJuIHRydWUgYm90aCBmb3IgY29tcEV4cHIoKShlMCwg
ZTEpIGFuZCBjb21wRXhwcigpKGUxLCBlMCkgaWYmbmJzcDs8L2Rpdj48ZGl2Pjxicj48L2Rpdj48
ZGl2PjEuIGUwIC0mZ3Q7IHNpZ24gJm5ic3A7KCkgJmx0OyBlMSAtJmd0OyBzaWduICZuYnNwOygp
IGFuZDwvZGl2PjxkaXY+Mi4gKGUwIC0mZ3Q7IEltYWdlICgpICE9IE5VTEwpICZhbXA7JmFtcDsg
KGUxIC0mZ3Q7IEltYWdlICgpICE9IE5VTEwpIGFuZDwvZGl2PjxkaXY+My4gZTEgLSZndDsgSW1h
Z2UgKCkgLSZndDsgY29tcGFyZSAoKihlMCAtJmd0OyBJbWFnZSAoKSkpICZsdDsgMDwvZGl2Pjxk
aXY+PGJyPjwvZGl2PjxkaXY+YW5kIGluIHNvbWUgb3RoZXIgY2FzZXMuPC9kaXY+PGRpdj48YnI+
PC9kaXY+PGRpdj5UaGlzIGlzIGVhc3kgdG8gY2hlY2sgYnkgYWRkaW5nIGFuIGFzc2VydDwvZGl2
PjxkaXY+PGJyPjwvZGl2PjxkaXY+YGBgYysrPC9kaXY+PGRpdj5zdHJ1Y3QgY29tcEV4cHIgezwv
ZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBpbmxpbmUgYm9vbCBjb21wYXJlIChleHByQXV4KiBlMCwg
ZXhwckF1eCogZTEpIGNvbnN0PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7IHs8L2Rpdj48ZGl2PiZu
YnNwOyAmbmJzcDsgJm5ic3A7IHJldHVybiAoKGUwIC0mZ3Q7IHNpZ24gJm5ic3A7KCkgJmx0OyBl
MSAtJmd0OyBzaWduICZuYnNwOygpKSB8fDwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICgoZTAgLSZndDsgSW1hZ2UgKCkgIT0gTlVMTCkg
JmFtcDsmYW1wOyAoZTEgLSZndDsgSW1hZ2UgKCkgIT0gTlVMTCkgJmFtcDsmYW1wOyAoZTAgLSZn
dDsgSW1hZ2UgKCkgLSZndDsgY29tcGFyZSAoKihlMSAtJmd0OyBJbWFnZSAoKSkpICZsdDsgMCkp
KTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgfTwvZGl2PjxkaXY+Jm5ic3A7IGlubGluZSBib29s
IG9wZXJhdG9yICgpIChleHByQXV4KiBlMCwgZXhwckF1eCogZTEpIGNvbnN0PC9kaXY+PGRpdj4m
bmJzcDsgezwvZGl2PjxkaXY+Jm5ic3A7ICZuYnNwOyBib29sIHJlc3VsdCA9IGNvbXBhcmUoZTAs
IGUxKTs8L2Rpdj48ZGl2PiZuYnNwOyAmbmJzcDsgYXNzZXJ0KCFyZXN1bHQgfHwgcmVzdWx0ICE9
IGNvbXBhcmUoZTEsIGUwKSk7PC9kaXY+PGRpdj4mbmJzcDsgJm5ic3A7IHJldHVybiByZXN1bHQ7
PC9kaXY+PGRpdj4mbmJzcDsgfTwvZGl2PjxkaXY+fTs8L2Rpdj48ZGl2PmBgYDwvZGl2PjxkaXY+
PGJyPjwvZGl2PjxkaXY+YW5kIHJ1bm5pbmcgImNvdW5uZSB0b3kubmwiIHdoZXJlIHRveS5ubCBp
cyBhIHRlc3QgTkwgZmlsZSBmcm9tIENvdWVubmUvdGVzdC9kYXRhLjwvZGl2PjxkaXY+PGJyPjwv
ZGl2PjxkaXY+VGhlIGF0dGFjaGVkIHBhdGNoIGZpeGVzIHRoZSBpc3N1ZS48L2Rpdj48ZGl2Pjxi
cj48L2Rpdj48ZGl2PkJlc3QgcmVnYXJkcyw8L2Rpdj48ZGl2PlZpY3RvcjwvZGl2PjxkaXY+PGJy
PjwvZGl2PjxkaXY+PGJyPjwvZGl2Pg==" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>