¿Cuáles son las reglas para elegir entre funciones de plantilla sobrecargadas?
Dado el código de abajo, ¿por qué es elfoo(T*)
función seleccionada?
Si lo quito (elfoo(T*)
) el código aún compila y funciona correctamente, pero G ++ v4.4.0 (y probablemente otros compiladores también) generará dosfoo()
Funciones: una para char [4] y otra para char [7].
#include <iostream>
using namespace std;
template< typename T >
void foo( const T& )
{
cout << "foo(const T&)" << endl;
}
template< typename T >
void foo( T* )
{
cout << "foo(T*)" << endl;
}
int main()
{
foo( "bar" );
foo( "foobar" );
return 0;
}