#include <iostream>
#include <list>
using namespace std;
template <typename T>
void display(const T& input)
{
for(auto i = input.cbegin(); i!=input.cend(); ++i)
cout << *i << ' ';
cout << endl;
return;
}
template <typename R>
class SomeFunc
{
public:
bool operator ()(const R& in1, const R& in2)
{
return in1>in2;
}
};
template <typename R>
bool someFunc(const R& in1, const R& in2)
{
return in1<in2;
}
int main()
{
list<int> myList;
myList.push_back(5);
myList.push_back(137);
myList.push_back(-77);
display(myList);
myList.sort(SomeFunc<decltype(myList)::value_type>());
display(myList);
myList.sort(someFunc<decltype(myList)::value_type>);
display(myList);
cin.ignore();
return 0;
};
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bGlzdD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp2b2lkIGRpc3BsYXkoY29uc3QgVCYgaW5wdXQpCnsKICAgIGZvcihhdXRvIGkgPSBpbnB1dC5jYmVnaW4oKTsgaSE9aW5wdXQuY2VuZCgpOyArK2kpCgkJY291dCA8PCAqaSA8PCAnICc7Cgljb3V0IDw8IGVuZGw7CglyZXR1cm47Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBSPgpjbGFzcyBTb21lRnVuYwp7CnB1YmxpYzoKCWJvb2wgb3BlcmF0b3IgKCkoY29uc3QgUiYgaW4xLCBjb25zdCBSJiBpbjIpCgl7CgkJcmV0dXJuIGluMT5pbjI7Cgl9Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgUj4KYm9vbCBzb21lRnVuYyhjb25zdCBSJiBpbjEsIGNvbnN0IFImIGluMikKewoJcmV0dXJuIGluMTxpbjI7Cn0KCgppbnQgbWFpbigpCnsKCWxpc3Q8aW50PiBteUxpc3Q7CglteUxpc3QucHVzaF9iYWNrKDUpOwoJbXlMaXN0LnB1c2hfYmFjaygxMzcpOwoJbXlMaXN0LnB1c2hfYmFjaygtNzcpOwoJZGlzcGxheShteUxpc3QpOwoJbXlMaXN0LnNvcnQoU29tZUZ1bmM8ZGVjbHR5cGUobXlMaXN0KTo6dmFsdWVfdHlwZT4oKSk7CglkaXNwbGF5KG15TGlzdCk7CglteUxpc3Quc29ydChzb21lRnVuYzxkZWNsdHlwZShteUxpc3QpOjp2YWx1ZV90eXBlPik7CglkaXNwbGF5KG15TGlzdCk7CgoJY2luLmlnbm9yZSgpOwoJcmV0dXJuIDA7Cgp9Ow==