#include <iostream>
#include <cmath>
using namespace std;
template<size_t depth, typename Func, typename... Args>
auto deep(Func foo, Args&&... args)
{
if constexpr(depth != 0)
{
return foo(deep<depth-1>(foo, std::forward<Args>(args)...));
}
else
return foo(std::forward<Args>(args)...);
}
double Cos(double x) { return cos(x); }
int main(int argc, char * argv[])
{
cout << deep<100>(Cos,0.0);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y21hdGg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8c2l6ZV90IGRlcHRoLCB0eXBlbmFtZSBGdW5jLCB0eXBlbmFtZS4uLiBBcmdzPgphdXRvIGRlZXAoRnVuYyBmb28sIEFyZ3MmJi4uLiBhcmdzKQp7CiAgICBpZiBjb25zdGV4cHIoZGVwdGggIT0gMCkKICAgIHsKICAgICAgICByZXR1cm4gZm9vKGRlZXA8ZGVwdGgtMT4oZm9vLCBzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pKTsKICAgIH0KICAgIGVsc2UKICAgICAgICByZXR1cm4gZm9vKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLik7Cn0KCmRvdWJsZSBDb3MoZG91YmxlIHgpIHsgcmV0dXJuIGNvcyh4KTsgfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiBhcmd2W10pCnsKICAgIGNvdXQgPDwgZGVlcDwxMDA+KENvcywwLjApOwp9Cg==