overloading functions against function templates
Sergey Gromov
snake.scaly at gmail.com
Fri Jul 31 05:55:09 PDT 2009
Thu, 30 Jul 2009 14:09:21 -0700, Walter Bright wrote:
> Currently, that can't be done. But it would be good to get it in for D2.
> The question is, what rule to use?
>
> I suggest that:
>
> 1. if any functions match, then overload functions the usual way
>
> 2. if no functions match, then overload the function templates the usual way
>
> Or reverse the priority of the two.
>
> What do you think?
I think regular functions should go first.
Let's take 4 functions for example:
void foo(int);
void foo(long);
void foo(T)(T);
void foo(T : int)(T);
and call foo(5);
If regular functions go first, we can order ours by match quality:
void foo(int); <= best
void foo(long);
void foo(T : int)(T);
void foo(T)(T); <= worst
That's OK, the worst match is the least specialized template. But if we
consider templates first:
void foo(T : int)(T); <= best
void foo(T)(T);
void foo(int);
void foo(long); <= worst
What I strongly dislike about this is that a generic, non-specialized
foo(T)(T) effectively hides any non-templated and obviously more
specialized regular functions. I think this simply won't work.
More information about the Digitalmars-d
mailing list