Overload resolution compilation error

Rodolfo Lima rodolfo@rodsoft.org
Fri Jul 20 00:19:00 GMT 2007


"Ling-hua Tseng" <uranus@it.muds.net> escreveu na mensagem

> What is the `target' in your program?
> The answer is NOTHING.
> So the set of overloaded functions is empty at beginning.

In my first example, the target type is the type of the address expression, 
i.e., the type of the source. I'll repeat it here:

template <class F> void bar(F f) {}
template <class T> void foo(T v) {}
void foo(int v) {}
...
bar(&foo);

According to the paragraph 2 of section 13.4, (and against of what I've said 
in my previous post), if there's a template function involved, the compiler 
tries to deduct the template arguments from the target type. If it succeeds, 
this specialization is added to the overload set. In my example, the 
compiler cannot deduct the template argument, so the template function 
doesn't get added to the overload set. Only the non-template function is 
added. Being the only function in the set, there's no ambiguity and the 
address of "void foo()" should be passed to "bar".

Best regards,
Rodolfo Lima. 





More information about the Gcc mailing list