int
g(double x);

template <typename T>
    int
    f(const T x);

int
g(double x)
{
    return f(x);
}

template <typename T, typename S>
int
f(const T x, S y)
{
    return int(x+1+y);
}

template <typename T>
int
f(const T x)
{
    return int(x+1);
}

int
main()
{
    g(2);
}
