1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | //chaining comparison object template<class T> class comparison { const bool result; const T& last; public: comparison(const T& l, bool r=true) :result(r), last(l) {} operator bool() const {return result;} comparison operator<(const T& rhs) const {return comparison(rhs, (result && last<rhs));} comparison operator<=(const T& rhs) const {return comparison(rhs, (result && last<=rhs));} comparison operator>(const T& rhs) const {return comparison(rhs, (result && last>rhs));} comparison operator>=(const T& rhs) const {return comparison(rhs, (result && last>=rhs));} }; //random object that has operator chaining built in struct a { int val; comparison<a> operator<(const a& rhs) const {return comparison<a>(rhs, val<rhs.val);} comparison<a> operator<=(const a& rhs) const {return comparison<a>(rhs, val<=rhs.val);} comparison<a> operator>(const a& rhs) const {return comparison<a>(rhs, val>rhs.val);} comparison<a> operator>=(const a& rhs) const {return comparison<a>(rhs, val>=rhs.val);} }; #include <iostream> int main() { a v0 = {0}; a v1 = {1}; a v2 = {2}; //testing of chained comparisons with builtin std::cout << (v0<v1<v2) << '\n'; std::cout << (v0<v1>v2) << '\n'; std::cout << (v0>v1<v2) << '\n'; std::cout << (v0>v1>v2) << '\n'; //testing of chained comparisons with int std::cout << (comparison<int>(0)<1<2) << '\n'; std::cout << (comparison<int>(0)<1>2) << '\n'; std::cout << (comparison<int>(0)>1<2) << '\n'; std::cout << (comparison<int>(0)>1>2) << '\n'; } |
Ly9jaGFpbmluZyBjb21wYXJpc29uIG9iamVjdAp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBjb21wYXJpc29uIHsKICAgIGNvbnN0IGJvb2wgcmVzdWx0OwogICAgY29uc3QgVCYgbGFzdDsKcHVibGljOgogICAgY29tcGFyaXNvbihjb25zdCBUJiBsLCBib29sIHI9dHJ1ZSkgOnJlc3VsdChyKSwgbGFzdChsKSB7fQogICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHtyZXR1cm4gcmVzdWx0O30KICAgIGNvbXBhcmlzb24gb3BlcmF0b3I8KGNvbnN0IFQmIHJocykgY29uc3Qge3JldHVybiBjb21wYXJpc29uKHJocywgKHJlc3VsdCAmJiBsYXN0PHJocykpO30KICAgIGNvbXBhcmlzb24gb3BlcmF0b3I8PShjb25zdCBUJiByaHMpIGNvbnN0IHtyZXR1cm4gY29tcGFyaXNvbihyaHMsIChyZXN1bHQgJiYgbGFzdDw9cmhzKSk7fQogICAgY29tcGFyaXNvbiBvcGVyYXRvcj4oY29uc3QgVCYgcmhzKSBjb25zdCB7cmV0dXJuIGNvbXBhcmlzb24ocmhzLCAocmVzdWx0ICYmIGxhc3Q+cmhzKSk7fQogICAgY29tcGFyaXNvbiBvcGVyYXRvcj49KGNvbnN0IFQmIHJocykgY29uc3Qge3JldHVybiBjb21wYXJpc29uKHJocywgKHJlc3VsdCAmJiBsYXN0Pj1yaHMpKTt9Cn07CgovL3JhbmRvbSBvYmplY3QgdGhhdCBoYXMgb3BlcmF0b3IgY2hhaW5pbmcgYnVpbHQgaW4Kc3RydWN0IGEgewogICAgaW50IHZhbDsKICAgIGNvbXBhcmlzb248YT4gb3BlcmF0b3I8KGNvbnN0IGEmIHJocykgY29uc3Qge3JldHVybiBjb21wYXJpc29uPGE+KHJocywgdmFsPHJocy52YWwpO30KICAgIGNvbXBhcmlzb248YT4gb3BlcmF0b3I8PShjb25zdCBhJiByaHMpIGNvbnN0IHtyZXR1cm4gY29tcGFyaXNvbjxhPihyaHMsIHZhbDw9cmhzLnZhbCk7fQogICAgY29tcGFyaXNvbjxhPiBvcGVyYXRvcj4oY29uc3QgYSYgcmhzKSBjb25zdCB7cmV0dXJuIGNvbXBhcmlzb248YT4ocmhzLCB2YWw+cmhzLnZhbCk7fQogICAgY29tcGFyaXNvbjxhPiBvcGVyYXRvcj49KGNvbnN0IGEmIHJocykgY29uc3Qge3JldHVybiBjb21wYXJpc29uPGE+KHJocywgdmFsPj1yaHMudmFsKTt9Cn07CgojaW5jbHVkZSA8aW9zdHJlYW0+CmludCBtYWluKCkgewogICAgYSB2MCA9IHswfTsKICAgIGEgdjEgPSB7MX07CiAgICBhIHYyID0gezJ9OwogICAgLy90ZXN0aW5nIG9mIGNoYWluZWQgY29tcGFyaXNvbnMgd2l0aCBidWlsdGluCiAgICBzdGQ6OmNvdXQgPDwgKHYwPHYxPHYyKSA8PCAnXG4nOwogICAgc3RkOjpjb3V0IDw8ICh2MDx2MT52MikgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCAodjA+djE8djIpIDw8ICdcbic7CiAgICBzdGQ6OmNvdXQgPDwgKHYwPnYxPnYyKSA8PCAnXG4nOwogICAgLy90ZXN0aW5nIG9mIGNoYWluZWQgY29tcGFyaXNvbnMgd2l0aCBpbnQKICAgIHN0ZDo6Y291dCA8PCAoY29tcGFyaXNvbjxpbnQ+KDApPDE8MikgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCAoY29tcGFyaXNvbjxpbnQ+KDApPDE+MikgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCAoY29tcGFyaXNvbjxpbnQ+KDApPjE8MikgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCAoY29tcGFyaXNvbjxpbnQ+KDApPjE+MikgPDwgJ1xuJzsKfQogICAg
-
upload with new input
-
result: Success time: 0s memory: 2884 kB returned value: 0
1 0 0 0 1 0 0 0


