#include <string>
int lua_getnumber() { return 42; }
std::string lua_getstring() { return "foo"; }
#include <type_traits>
template <typename T>
using EnableIf = typename std::enable_if<T::value, int>::type;
template <typename T>
using DisableIf = typename std::enable_if<not T::value, int>::type;
namespace lua {
template <typename T,
EnableIf<std::is_arithmetic<T>>...>
T get() { return lua_getnumber(); }
template <typename T,
DisableIf<std::is_arithmetic<T>>...>
T get() { return lua_getstring(); }
}
#include <iostream>
int main() {
std::cout << lua::get<int>() << '\n';
std::cout << lua::get<double>() << '\n';
std::cout << lua::get<std::string>() << '\n';
}
I2luY2x1ZGUgPHN0cmluZz4KCmludCBsdWFfZ2V0bnVtYmVyKCkgeyByZXR1cm4gNDI7IH0Kc3RkOjpzdHJpbmcgbHVhX2dldHN0cmluZygpIHsgcmV0dXJuICJmb28iOyB9CgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KdXNpbmcgRW5hYmxlSWYgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxUOjp2YWx1ZSwgaW50Pjo6dHlwZTsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnVzaW5nIERpc2FibGVJZiA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPG5vdCBUOjp2YWx1ZSwgaW50Pjo6dHlwZTsKCm5hbWVzcGFjZSBsdWEgewogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCiAgICAgICAgICAgICAgRW5hYmxlSWY8c3RkOjppc19hcml0aG1ldGljPFQ+Pi4uLj4KICAgIFQgZ2V0KCkgeyByZXR1cm4gbHVhX2dldG51bWJlcigpOyB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsCiAgICAgICAgICAgICAgRGlzYWJsZUlmPHN0ZDo6aXNfYXJpdGhtZXRpYzxUPj4uLi4+CiAgICBUIGdldCgpIHsgcmV0dXJuIGx1YV9nZXRzdHJpbmcoKTsgfQp9CgojaW5jbHVkZSA8aW9zdHJlYW0+CgppbnQgbWFpbigpIHsKICAgIHN0ZDo6Y291dCA8PCBsdWE6OmdldDxpbnQ+KCkgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCBsdWE6OmdldDxkb3VibGU+KCkgPDwgJ1xuJzsKICAgIHN0ZDo6Y291dCA8PCBsdWE6OmdldDxzdGQ6OnN0cmluZz4oKSA8PCAnXG4nOwp9