<div dir="ltr">When I try to compile scip, I get a compilation error in a soplex include file.<div><br></div><div>I compile under windows with cmake and it uses Microsoft Visual Studio 17 2022<br><div><br></div><div>First I had to build soplex. I used following commands for that:</div><div><br></div><div>cmake -Bbuild -H.<br>cmake --build build --config Release<br></div><div><br></div><div>This worked find and generated the soplex binaries.</div><div><br></div><div>Then I use the following command to build scip:</div><div><br></div><div>cmake -Bbuild -H. -DSOPLEX_DIR=..\soplex\build -DZLIB=off -DREADLINE=off -DGMP=off -DPAPILO=off -DZIMPL=off -DIPOPT=off<br><br></div><div>Which works fine. Then I use the following command to build:</div><div><br></div><div>cmake --build build --config Release<br></div></div><div><br></div><div>At a certain point it gives:</div><div><br></div><div>C:\git\soplex\src\soplex/ssvectorbase.h(135,1): error C2445: result type of conditional expression is ambiguous: types 'R' and 'soplex::Real' can be converted to multiple common types [C:\git\scip\build\src\libscip.vcxproj]<br>          with<br>          [<br>              R=Rational<br>          ]<br>C:\git\soplex\src\soplex/ssvectorbase.h(135,1): message : could be 'R' [C:\git\scip\build\src\libscip.vcxproj]<br>          with<br>          [<br>              R=Rational<br>          ]<br>C:\git\soplex\src\soplex/ssvectorbase.h(135,1): message : or       'soplex::Real' [C:\git\scip\build\src\libscip.vcxproj]<br>C:\git\soplex\src\soplex/ssvectorbase.h(133,1): message : while compiling class template member function 'R soplex::SSVectorBase<R>::getEpsilon(void) const' [C:\git\scip\build\src\libscip.vcxproj]<br>          with<br>          [<br>              R=Rational<br>          ]<br>C:\git\soplex\src\soplex/ssvectorbase.h(861,16): message : see reference to function template instantiation 'R soplex::SSVectorBase<R>::getEpsilon(void) const' being compiled [C:\git\scip\build\src\libscip.vcxproj]<br>          with<br>          [<br>              R=Rational<br>          ]<br>C:\git\soplex\src\soplex/basevectors.h(898,55): message : see reference to class template instantiation 'soplex::SSVectorBase<R>' being compiled [C:\git\scip\build\src\libscip.vcxproj]<br>          with<br>          [<br>              R=Rational<br>          ]<br></div><div><br></div><div>It's about this code:</div><div><br></div><div>   R getEpsilon() const<br>   {<br>      assert(this->_tolerances != nullptr);<br>      return this->_tolerances == nullptr ? R(0) : this->tolerances()->epsilon();<br>   }<br></div><div><br></div><div>And specifically </div><div><br></div><div>return this->_tolerances == nullptr ? R(0) : this->tolerances()->epsilon();<br></div><div><br></div><div>I guess most compilers accept an implicit cast from this->tolerances()->epsilon() which is a soplex::Real and type R.</div><div><br></div><div>To make it compile, I changed the line to:</div><div><br></div><div>return this->_tolerances == nullptr ? R(0) : (R)this->tolerances()->epsilon();<br></div><div><br></div><div>And then everything compiles fine.</div><div><br></div><div>My C++ knowledge is very limited (I never got further than C) so I am also not 100% sure is this is the correct solution for this problem.</div><div><br></div><div>It would be great if the code was changed to solve this ambiguity.</div><div><br></div><div>Thank you,</div><div><br></div><div>Peter Notebaert</div></div>