IFTI in Eponymous Templates

Hiemlick Hiemlicker via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jun 29 13:42:06 PDT 2016


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


More information about the Digitalmars-d-learn mailing list