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.