https://gcc.gnu.org/bugzilla/show_bug.cgi?id=19741
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed|2006-01-15 21:09:27 |2018-4-23
--- Comment #7 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Reduced to remove the irrelevant parts and demonstrate the difference between
calls to non-template and temploid functions:
template<typename T> void Func( T ) { }
typedef bool (*op_func)( int );
void Exec( op_func ) { }
template<typename T>
struct Op
{
static void Exec( op_func ) { }
};
int main( )
{
Exec( &Func<int> );
Op<int>::Exec( &Func<int> );
}
t.cc:17:20: error: no matches converting function 'Func' to type 'op_func' {aka
'bool (*)(int)'}
Exec( &Func<int> );
^
t.cc:1:27: note: candidate is: 'template<class T> void Func(T)'
template<typename T> void Func( T ) { }
^~~~
t.cc:18:29: error: no matching function for call to 'Op<int>::Exec(<unresolved
overloaded function type>)'
Op<int>::Exec( &Func<int> );
^
t.cc:10:15: note: candidate: 'static void Op<T>::Exec(op_func) [with T = int;
op_func = bool (*)(int)]'
static void Exec( op_func ) { }
^~~~
t.cc:10:15: note: no known conversion for argument 1 from '<unresolved
overloaded function type>' to 'op_func' {aka 'bool (*)(int)'}