On Wednesday, 29 June 2016 at 18:59:19 UTC, jmh530 wrote:
I was playing around with some Eponymous Templates. I had been under the impression that Implicit Function-Template Instantiation (IFTI) meant that you don't have to explicitly instantiate all functions. However, it seems like there are cases with eponymous templates with functions in them that you do. For instance, in the bar function below, I have to explicitly instantiate the inner function template.


template foo(T, U)
{
        T foo(T x, U y)
        {
                return x + cast(T)y;
        }
}

template bar(T)
{
        T bar(U)(T x, U y)
        {
                return x + cast(T)y;
        }
}

void main()
{
        int a = 1;
        long b = 2;
        auto x = foo(a, a);
        //auto y = bar(a, b); //error
        auto y = bar!(long)(a, b);
}

This seems like a bug?! U can clearly be deduced. The real question, is it needed?


template bar(T, U)
{
        T bar(T x, U y)
        {
                return x + cast(T)y;
        }
}

Reply via email to