This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Overload resolution compilation error


On Thu, 19 Jul 2007 14:45:31 -0300, Rodolfo Schulz de Lima wrote
> &print is not a call expression the same way &print<5> isn't, but 
> the latter is resolved correctly.
It's because you have specified it explicitly.
> I cannot see how a template function can be instantiated without <>, 
> since its instantiation needs the template parameters. That's why I 
> think that the compiler shouldn't even consider this situation in 
> overload resolution. With this said, in your exemple the only 
> overload for '&foo' should be 'void foo()'.
The function template `std::make_pair<>()' is an example.
You can directly call it without <>.
Since &print is not a call expression, C++ compilers cannot determine it by 
function arguments.

This problem can be also reduced to this one:
==========
void foo() { }
void foo(int) { }

int main()
{
        &foo;
}
==========

It's the same problem.
The instantiations of a function template can co-exist with non-template 
function, and they're treated as overloaded functions in C++ compilers.
In fact, the overload resolution mechanism is never performed here since 
it's not a call expression.
You can only speicify it explicitly.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]