Quais são as regras para escolher de funções de modelo sobrecarregadas?
Dado o código abaixo, por que ofoo(T*)
função selecionada?
Se eu removê-lo (ofoo(T*)
) o código ainda compila e funciona corretamente, mas o G ++ v4.4.0 (e provavelmente outros compiladores também) irá gerar doisfoo()
funções: uma para char [4] e uma 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;
}