#include <iostream>
using namespace std;
struct foo
{
int min(int a, int b) { return a < b ? a : b; }
int max(int a, int b) { return a > b ? a : b; }
};
typedef int(foo::*function_type)(int, int);
void processor(function_type func, foo* object)
{
std::cout << "1 and 2 = " << (object->*func)(1, 2) << std::endl;
std::cout << "5 and 2 = " << (object->*func)(5, 2) << std::endl << std::endl;
}
int main()
{
foo f;
processor(&foo::min, &f);
processor(&foo::max, &f);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGZvbwp7CglpbnQgbWluKGludCBhLCBpbnQgYikgeyByZXR1cm4gYSA8IGIgPyBhIDogYjsgfQoJaW50IG1heChpbnQgYSwgaW50IGIpIHsgcmV0dXJuIGEgPiBiID8gYSA6IGI7IH0KfTsKCnR5cGVkZWYgaW50KGZvbzo6KmZ1bmN0aW9uX3R5cGUpKGludCwgaW50KTsKCnZvaWQgcHJvY2Vzc29yKGZ1bmN0aW9uX3R5cGUgZnVuYywgZm9vKiBvYmplY3QpCnsKCXN0ZDo6Y291dCA8PCAiMSBhbmQgMiA9ICIgPDwgKG9iamVjdC0+KmZ1bmMpKDEsIDIpIDw8IHN0ZDo6ZW5kbDsKCXN0ZDo6Y291dCA8PCAiNSBhbmQgMiA9ICIgPDwgKG9iamVjdC0+KmZ1bmMpKDUsIDIpIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7Cn0KCmludCBtYWluKCkgCnsKCWZvbyBmOwoJCglwcm9jZXNzb3IoJmZvbzo6bWluLCAmZik7Cglwcm9jZXNzb3IoJmZvbzo6bWF4LCAmZik7CgkKCXJldHVybiAwOwp9