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;
}
}