#include <iostream>
struct cool_operator
{
cool_operator() = default;
cool_operator(int _n, bool b = false) : first(b), n(_n) {}
bool first;
bool operator <(int x) const
{
return first && (n < x);
}
int n;
};
cool_operator operator <(int x, cool_operator const &lhs)
{
return cool_operator(lhs.n, x < lhs.n);
}
int main()
{
cool_operator c(4);
std::cout << std::boolalpha << (3 < c < 5); // true
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IGNvb2xfb3BlcmF0b3IKewogICAgY29vbF9vcGVyYXRvcigpID0gZGVmYXVsdDsKICAgIGNvb2xfb3BlcmF0b3IoaW50IF9uLCBib29sIGIgPSBmYWxzZSkgOiBmaXJzdChiKSwgbihfbikge30KCiAgICBib29sIGZpcnN0OwoKICAgIGJvb2wgb3BlcmF0b3IgPChpbnQgeCkgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gZmlyc3QgJiYgKG4gPCB4KTsKICAgIH0KICAgIAogICAgaW50IG47Cn07Cgpjb29sX29wZXJhdG9yIG9wZXJhdG9yIDwoaW50IHgsIGNvb2xfb3BlcmF0b3IgY29uc3QgJmxocykKewogICAgcmV0dXJuIGNvb2xfb3BlcmF0b3IobGhzLm4sIHggPCBsaHMubik7Cn0KCmludCBtYWluKCkKewogICAgY29vbF9vcGVyYXRvciBjKDQpOwoKICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmJvb2xhbHBoYSA8PCAoMyA8IGMgPCA1KTsgLy8gdHJ1ZQp9