#include <iostream>
#include <functional>
using namespace std;
template <typename T, typename U, typename func>
T halfmod(func f, T n, U mod){
return f(n/2,mod);
}
int main(){
int n = 6262468, mod = 1000;
auto f = [](int n, int mod){ return n%mod;} ;
cout << f(n,mod) << endl; //should output 468, which it does
cout << halfmod(f, n, mod) << endl; //should output 234... error
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgCnRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBmdW5jPgpUIGhhbGZtb2QoZnVuYyBmLCBUIG4sIFUgbW9kKXsKICAgIHJldHVybiBmKG4vMixtb2QpOwp9CiAgIAppbnQgbWFpbigpewogICAgaW50IG4gPSA2MjYyNDY4LCBtb2QgPSAxMDAwOwogICAgYXV0byBmID0gW10oaW50IG4sIGludCBtb2QpeyByZXR1cm4gbiVtb2Q7fSA7CiAgICBjb3V0IDw8IGYobixtb2QpIDw8IGVuZGw7ICAvL3Nob3VsZCBvdXRwdXQgNDY4LCB3aGljaCBpdCBkb2VzCiAgICBjb3V0IDw8IGhhbGZtb2QoZiwgbiwgbW9kKSA8PCBlbmRsOyAvL3Nob3VsZCBvdXRwdXQgMjM0Li4uIGVycm9yCiAgICByZXR1cm4gMDsKfQo=