#include <iostream>
using namespace std;
template <class T, typename comp>
struct klasa {
klasa(const T &a, const T &b, comp C = greater<T>())
{
cout << C(a, b) << endl;
}
};
struct MyCompare
{
bool operator()(const int& a, const int& b) { return true; }
};
bool fPtr(const int& a, const int& b) { return false; }
int main()
{
klasa<int, greater<int>> a(1, 2);
klasa<int, MyCompare> b(5, 2, MyCompare());
auto lessThan = [](const int& a, const int& b) { return a < b; };
klasa<int, decltype(lessThan)> c(1, 5, lessThan);
klasa<int, decltype(fPtr)> d(0, 0, fPtr);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwogCnRlbXBsYXRlIDxjbGFzcyBULCB0eXBlbmFtZSBjb21wPgpzdHJ1Y3Qga2xhc2EgewogICAga2xhc2EoY29uc3QgVCAmYSwgY29uc3QgVCAmYiwgY29tcCBDID0gZ3JlYXRlcjxUPigpKSAKICAgIHsKICAgICAgICBjb3V0IDw8IEMoYSwgYikgPDwgZW5kbDsKICAgIH0KfTsKIApzdHJ1Y3QgTXlDb21wYXJlCnsKICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBpbnQmIGEsIGNvbnN0IGludCYgYikgeyByZXR1cm4gdHJ1ZTsgfQp9OwogCmJvb2wgZlB0cihjb25zdCBpbnQmIGEsIGNvbnN0IGludCYgYikgeyByZXR1cm4gZmFsc2U7IH0KIAppbnQgbWFpbigpIAp7CiAgICBrbGFzYTxpbnQsIGdyZWF0ZXI8aW50Pj4gYSgxLCAyKTsKICAgIGtsYXNhPGludCwgTXlDb21wYXJlPiBiKDUsIDIsIE15Q29tcGFyZSgpKTsKIAogICAgYXV0byBsZXNzVGhhbiA9IFtdKGNvbnN0IGludCYgYSwgY29uc3QgaW50JiBiKSB7IHJldHVybiBhIDwgYjsgfTsKICAgIGtsYXNhPGludCwgZGVjbHR5cGUobGVzc1RoYW4pPiBjKDEsIDUsIGxlc3NUaGFuKTsKIAogICAga2xhc2E8aW50LCBkZWNsdHlwZShmUHRyKT4gZCgwLCAwLCBmUHRyKTsKIAogICAgcmV0dXJuIDA7Cn0=