template<class T, unsigned int n>
class function {
T result;
public:
function(T r) :result(r + function<T,n-1>(r)) {};
operator T() {return result;}
};
template<class T>
class function<T,0> {
T result;
public:
function(T r) :result(0) {}
operator T() {return result;}
};
#include <iostream>
int main() {
int input = 42;
int output = function<int, 3>(input);
std::cout << output << ' ' << function<int, 3>(42);
return 0;
}
dGVtcGxhdGU8Y2xhc3MgVCwgdW5zaWduZWQgaW50IG4+CmNsYXNzIGZ1bmN0aW9uIHsKICAgVCByZXN1bHQ7CnB1YmxpYzoKICAgZnVuY3Rpb24oVCByKSA6cmVzdWx0KHIgKyBmdW5jdGlvbjxULG4tMT4ocikpIHt9OwogICBvcGVyYXRvciBUKCkge3JldHVybiByZXN1bHQ7fQp9Owp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBmdW5jdGlvbjxULDA+IHsKICAgVCByZXN1bHQ7CnB1YmxpYzoKICAgZnVuY3Rpb24oVCByKSA6cmVzdWx0KDApIHt9CiAgIG9wZXJhdG9yIFQoKSB7cmV0dXJuIHJlc3VsdDt9Cn07CgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgbWFpbigpIHsKICAgIGludCBpbnB1dCA9IDQyOwogICAgaW50IG91dHB1dCA9IGZ1bmN0aW9uPGludCwgMz4oaW5wdXQpOwogICAgc3RkOjpjb3V0IDw8IG91dHB1dCAgPDwgJyAnIDw8IGZ1bmN0aW9uPGludCwgMz4oNDIpOwogICAgcmV0dXJuIDA7Cn0=