Template member functions conflicting
Jarrett Billingsley
kb3ctd2 at yahoo.com
Sun Feb 18 07:12:27 PST 2007
"Robin Allen" <r.a3 at ntlworld.com> wrote in message
news:er9bin$1ksb$1 at digitalmars.com...
> class Bang(T)
> {
> void fn(U)( Bang!(U) ot) {}
>
> void fn(int q) {}
> }
>
> Why do the two member functions conflict here? One takes a class instance
> and a type, the other takes an int.
>
> If this is intended, and it's not possible to overload a function with a
> template function, then maybe it should be?
The page http://www.digitalmars.com/d/template-comparison.html says that
it's unfortunately not possible. What's worse, you can use specialized
template functions as that page suggests, but then you surrender IFTI, so
you will no longer be able to write "b.fn(4)" and have it automatically
determine that you want the int version. You'll have to write
"b.fn!(int)(4)".
The reason this isn't possible (I've heard) is that function overloading and
template specialization are two completely separate concepts, and getting
them to work together is very hard indeed.
More information about the Digitalmars-d-learn
mailing list