#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();
}
I2luY2x1ZGUgPGNvbXBsZXg+CiNpbmNsdWRlIDxtYXA+CgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IG1hdGhfcGFyc2VyewogICAgc3RhdGljIGNvbnN0IHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUKCopKGNvbnN0IFQmICk+IGZ1bmN0aW9uczsKCiAgICB2b2lkIGV2YWx1YXRlKCl7CiAgICAgICAgZnVuY3Rpb25zLmJlZ2luKCktPnNlY29uZChUKC0xKSk7CiAgICB9Cn07CgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY29uc3Qgc3RkOjptYXA8c3RkOjpzdHJpbmcsIFQoKikoY29uc3QgVCYgKT4gbWF0aF9wYXJzZXI8VD46OmZ1bmN0aW9ucyA9IHsKICAgIHtzdGQ6OnN0cmluZygiU1FSVCIpLCAoVCgqKShjb25zdCBUJiApKSZzdGQ6OnNxcnR9Cn07CgoKaW50IG1haW4oKXsKICAgIG1hdGhfcGFyc2VyPHN0ZDo6Y29tcGxleDxsb25nIGRvdWJsZT4+IHg7CiAgICB4LmV2YWx1YXRlKCk7Cn0K