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