#include <iostream>
template<class T>
struct larrow {
larrow(T* a_) : a(a_) { }
T* a;
};
template <class T, class R>
R operator<(R (T::* f)(), larrow<T> it) {
return (it.a->*f)();
}
template<class T>
larrow<T> operator-(T& a) {
return larrow<T>(&a);
}
struct C {
void f() { std::cout << "foo\n"; }
};
int main() {
C x;
(&C::f)<-x;
int i = 5;
std::cout << -i << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogCnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBsYXJyb3cgewogICAgbGFycm93KFQqIGFfKSA6IGEoYV8pIHsgfQogICAgVCogYTsKfTsKIAp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgUj4KUiBvcGVyYXRvcjwoUiAoVDo6KiBmKSgpLCBsYXJyb3c8VD4gaXQpIHsKICAgIHJldHVybiAoaXQuYS0+KmYpKCk7Cn0KIAp0ZW1wbGF0ZTxjbGFzcyBUPgpsYXJyb3c8VD4gb3BlcmF0b3ItKFQmIGEpIHsKICAgIHJldHVybiBsYXJyb3c8VD4oJmEpOwp9CiAKc3RydWN0IEMgewogICAgdm9pZCBmKCkgeyBzdGQ6OmNvdXQgPDwgImZvb1xuIjsgfSAgICAKfTsKIAppbnQgbWFpbigpIHsKICAgIEMgeDsKICAgICgmQzo6Zik8LXg7CiAgICBpbnQgaSA9IDU7CiAgICBzdGQ6OmNvdXQgPDwgLWkgPDwgc3RkOjplbmRsOwp9