This is kind of follow up of this question on stack overflow...I wrote the following to utilize memoization for functions that take a single parameter and return a value:#include <iostream>#include <map>using namespace std;template <class T, class R, R (*Func)(T)>R memoized(T in) {    static std::map<T,R> memo;    typename std::map<T,R>::iterator found = memo.find(in);    if (found != memo.end()) { return found->second; }      std::cout << not found << std::endl; // only for demo    R res = Func(in);    memo[in] = res;    return res;}double test(double x){return x*x;}double test2(double x){return x;}int main() {    std::cout << memoized<double,double,test>(1) << std::endl;    std::cout << memoized<double,double,test>(1) << std::endl;    std::cout << memoized<double,double,test>(1) << std::endl;    std::cout << std::endl;    std::cout << memoized<double,double,test2>(1) << std::endl;    std::cout << memoized<double,double,test2>(1) << std::endl;    std::cout << memoized<double,double,test2>(1) << std::endl;    return 0;}output:not found111not found111It is a rather strong restriction that it works only for functions taking a single parameter, but thats ok for now. Is there anything else wrong with this approach?PS: on purpose this is using only pre C++11
Memoization via template
c++;template;memoization;c++03