#include <iostream>
int anyFunc(int a, int b, int c = 0, int d = 0) {
return a + b + c + d;
}
template <class T, class F>
T callFunc4(F func, T a, T b, T c = T(), T d = T()) {
return func(a, b, c, d);
}
template <class T, class F>
T callFunc2(F func, T a, T b) {
return func(a, b);
}
int main() {
std::cout << callFunc4(anyFunc, 5, 5) << std::endl;
std::cout << callFunc2([](int a, int b){ return anyFunc(a,b); }, 5, 5) << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IGFueUZ1bmMoaW50IGEsIGludCBiLCBpbnQgYyA9IDAsIGludCBkID0gMCkgewogICAgcmV0dXJuIGEgKyBiICsgYyArIGQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRj4KVCBjYWxsRnVuYzQoRiBmdW5jLCBUIGEsIFQgYiwgVCBjID0gVCgpLCBUIGQgPSBUKCkpIHsKICAgIHJldHVybiBmdW5jKGEsIGIsIGMsIGQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgY2xhc3MgRj4KVCBjYWxsRnVuYzIoRiBmdW5jLCBUIGEsIFQgYikgewogICAgcmV0dXJuIGZ1bmMoYSwgYik7Cn0KCgppbnQgbWFpbigpIHsKICAgIHN0ZDo6Y291dCA8PCBjYWxsRnVuYzQoYW55RnVuYywgNSwgNSkgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8IGNhbGxGdW5jMihbXShpbnQgYSwgaW50IGIpeyByZXR1cm4gYW55RnVuYyhhLGIpOyB9LCA1LCA1KSA8PCBzdGQ6OmVuZGw7Cn0K