On Thu, 19 Jul 2007 12:59:09 -0300, Rodolfo Schulz de Lima wrote
> Hi, the code below doesn't compile with gcc-4.2, with the following error:
> 
> test.cpp: In function ‘int main()’:
> test.cpp:19: error: no matching function for call to 
> ‘call(<unresolved overloaded function type>)’
> 
> It compiles and runs fine with Visual Studio 2005. I think the 
> compiler should see that if I'm calling the non-templated 'print' 
> function and there's no other non-templated 'print' overload, it 
> should use 'void print()', with no ambiguity.
> 
Since the sub-expression `&print' is not a call expression,
the overload resolution mechanism will not select the non-template version 
first.
And the function templates can be instantiated without <>,
so the C++ compiler is confused.

This problem can be reduced to:
==========
void foo() { }
template<class T> void foo() { }

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

It can help you to understand what's happend.

Reply via email to