Mathcomp
Because C++ doesn't have math-like chained comparisons.
Observed Behaviour
C/C++ sucks like this:
int p= 121; // warning: comparison of boolean constant with arithmetic constant (39) is always true. // Not what we want! if (-17 < p < 39) { cout<< "foo"; } else { cout<< "bar"; } cout<< endl;
In the above the order of evaluation is:
(-17 < p) → bool
with the end resulttrue
.(true < 39) → bool
with the end resulttrue
(both because of integer promotion and because of bool comparison, so we're double struck here).
Expected Behaviour
To be able to write a chained comparison the way it's used in MATH.
What we can do:
int p= 121; if (something?() < -17 < p < 39) { cout<< "foo"; } else { cout<< "bar"; } cout<< endl;
So here mathcomp
provides that something.
Usage
#include "mathcomp/mathcomp.hpp" // ... in code using mathcomp::mathcomp; int p= 121; if (mathcomp< -17 <= p < 39) { cout<< "foo"; } else { cout<< "bar"; }
Mathcomp supports left-to-right ordered chained comparisons that means operators <
, <=
and ==
.
Note the use of operator<
at the beginning to activate chaining comparison. Operators < , <= , == , <<
can be used to activate chaining.
License
mathcomp
is licensed under the LGPL aka GNU Lesser Public License. License verbatim is provided in /doc/tip/LICENSE.txt. Visit also https://www.gnu.org/copyleft/lesser.html for license details and https://choosealicense.com/licenses/lgpl-3.0/ for a rundown.