#include <complex>
#include <map>


template<typename T>
struct math_parser{
    static const std::map<std::string, T(*)(const T& )> functions;

    void evaluate(){
        functions.begin()->second(T(-1));
    }
};


template<typename T>
const std::map<std::string, T(*)(const T& )> math_parser<T>::functions = {
    {std::string("SQRT"), (T(*)(const T& ))&std::sqrt}
};


int main(){
    math_parser<std::complex<long double>> x;
    x.evaluate();
}
